我有一个较大的表(>1.26 亿行),并且需要优化一组专门的查询,所以我在表上创建了一个索引视图,并编写了一个程序,当条件有利于时从索引视图中进行选择它。
该过程的执行时间比我预期的要长,所以我查看了执行计划,我发现耗时最长的查询是从我的视图中选择的查询,当我将鼠标悬停在耗时最长的元素上时,它是基础表的 CI 的聚集索引查找。不是视图上的索引。
我知道索引视图是一种存储在磁盘上的虚拟表,并且在查询时根本不会将查询传递到基础表。不是这样吗?
我有一个较大的表(>1.26 亿行),并且需要优化一组专门的查询,所以我在表上创建了一个索引视图,并编写了一个程序,当条件有利于时从索引视图中进行选择它。
该过程的执行时间比我预期的要长,所以我查看了执行计划,我发现耗时最长的查询是从我的视图中选择的查询,当我将鼠标悬停在耗时最长的元素上时,它是基础表的 CI 的聚集索引查找。不是视图上的索引。
我知道索引视图是一种存储在磁盘上的虚拟表,并且在查询时根本不会将查询传递到基础表。不是这样吗?
优化器可能会根据它选择实现查询的方式来选择使用基础表(它“扩展”视图)。要强制查询使用索引视图,您可以在引用视图的查询子句中添加
WITH (NOEXPAND)
提示。FROM
这很有用,原因有两个:
顺便说一句,建议在直接引用索引视图时使用此提示,以避免其他有问题的行为。有关详细信息,请参阅 Paul White 的这篇文章:Indexed Views and Statistics