我在视图上创建了一个唯一的聚簇索引。聚集索引包含5列(在此视图中为30列),但使用此视图的典型选择将需要所有30列。
进行一些测试表明,查询5列所需的时间比所有30列快。这是因为这只是选择6x列的自然开销,或者因为索引视图没有将非索引列存储在临时表中,因此需要执行一些额外的步骤来收集丢失的列(连接上基本表我猜?)
如果是后者,有什么措施可以防止这种情况发生?好吧,即使前者......有什么方法可以解决这个问题!
编辑:为了进行比较,仅使用5列的索引视图上的选择比基表上的相同查询快约10倍。但是对所有列的select在速度上与基表上的查询基本相同。
答案 0 :(得分:0)
根据定义,聚簇索引包含表中每一行的每个字段。它基本上是表的重新创建,但是通过聚簇索引按顺序使用物理数据页,使用b树排序可以快速访问聚簇键的指定值。
您是仅仅提取价值还是为其他25个字段获得MIN(), MAX(), AVG(), SUM()
等汇总功能?
答案 1 :(得分:0)
索引视图是数据的副本,可能(通常)以与基表不同的方式存储(聚集)。出于所有目的
当您仅选择tbl
中的5列时(其中包含索引视图ivw
)
ivw
当您选择所有30列时 - 索引视图无法提供帮助。查询完全忽略视图,只从基表中选择数据。
IF ,您可以从所有30列中选择数据
SQL Server可以使用索引视图(扫描/搜索)快速生成一个小结果集,然后可以使用它来JOIN返回基表以获取其余数据。