未使用索引视图 - SQL Server

Man*_*ani 12 index sql-server view materialized-view

我有一个带有多个连接的查询,它需要很长时间才能返回一个日期的数据。我已经创建了一个索引视图。在创建视图和索引时,我适当地设置了所有必需的选项。

我想利用索引视图的优势,如果我在其他地方有类似的查询或完全相同的查询,查询优化器会选择索引视图,以便提高性能。我尝试使用用于创建索引的完全相同的查询(带有额外的日期过滤器),但查询计划似乎没有改变。即使我在查询中显式使用视图,视图上的索引仍未使用。我只能让查询优化器使用带有 noexpand 提示的索引。请注意,我使用的是 SQL Server 企业版。

有什么建议?

gbn*_*gbn 25

如果优化器认为它可以更好地处理基表,这种情况就会经常发生。

如果我创建一个索引视图,我倾向于总是使用 NOEXPAND 让它使用它。我还比较了查询统计信息以确保它增加了一些好处。也就是说,如果我确定了一个有用的索引视图,我希望优化器始终使用它。

例子:

SET STATISTICS IO ON;
SET STATISTICS PROFILE ON;
SET STATISTICS TIME ON;
SELECT * FROM MySchema.myIndexedView ACB WITH (NOEXPAND) WHERE ...;
SELECT * FROM MySchema.myIndexedView ACB WHERE ...;
Run Code Online (Sandbox Code Playgroud)

请注意,根据版本,您可能会遇到谓词推送问题

请注意,此答案是通用的,因为我们没有要查看的代码和查询