小编典典

索引视图与表索引

sql

我有下表

EVENT_LOG

EVENT_ID: pk, int, not null
TYPEID: fk, int, not null
CATEGORYID: fk, int, null
SOURCE: varchar(255), null
DESCRIPTION: varchar(4000), null
CREATED: datetime, null

我们一直在创建报告,发现性能很糟糕。除了聚簇索引之外,没有任何其他索引。我们可以创建它们,但是由于该表的写入内容超出了读取的范围,因此存在对性能的权衡问题。对于报告,我倾向于在每个列上放置索引,因为需要在源和描述列中搜索子字符串。

我们想知道是否可以选择索引视图(又名实体化视图),其中索引视图将包含EVENT_LOG表中的所有列,但在视图上创建了适当的索引。这会为我们带来报告的性能,同时又不影响对EVENT_LOG表的写入吗?


阅读 174

收藏
2021-03-17

共1个答案

小编典典

索引视图将导致与列上索引相同的问题,因为索引视图require with schemabinding,将其直接绑定到表,从而使您无法以任何方式,形状或形式更改/更改该表的架构。这包括调整列的大小(例如,从-varchar(50)varchar(255)),更改列的数据类型(例如-从-doubledecimal(18,5))等。由于这一事实,我已经看到它们会引起很多意想不到的麻烦。

我的建议是设置一个存储过程或SSIS包,它将为您创建一个每小时运行一次的报告表。这样,您可以从中索引不断变化的地狱,并享受其所产生的所有性能优势。我不赞成从实时的正在进行的系统中进行报告。实际上,我还没有看到需要这样做的情况。出于报告目的,通常需要数小时的信息才能完成工作。

2021-03-17