【发布时间】:2010-12-13 10:33:23
【问题描述】:
我创建了一个包含三列的索引视图 (MyView):
Table1_ID (int not null)
Object_CreationDate (datetime, null)
Objec_Count(bigint null)
我在两列上创建了聚集唯一索引IX_1:Table1_ID 和Object_CreationDate
我想运行两个查询:
1.
Select * from [dbo].MyView
where Table1_ID = 10
2.
Select * from [dbo].MyView
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()
第一次查询运行速度很快(即使使用 DBCC DROPCLEANBUFFERS())并通过使用 MyView 和 IX_1 使用简单的执行计划
2-nd 查询运行不那么快,因为它使用“旧”执行计划(通过三个表中的多个索引和嵌套循环查找)
我误解了这种情况。至于我,很自然地使用 IX_1 和 MyView 进行第二次查询。
此外,我等待 2-nd 查询的运行速度与 1-st 相同甚至更快,因为它使用聚集索引中的两列 where 子句。
我尝试运行第二次查询 with(index=IX_1) 并更新列的统计信息,但仍然有相同的执行计划。
是否可以强制 sql 使用 MyView AND IX_1 ?
【问题讨论】:
标签: sql-server view sql-server-2008-r2 indexed