我创建了一个索引视图(我的观点)由三列组成:

Table1_ID (int not null)
Object_CreationDate (datetime, null)
Objec_Count(bigint null)

我创造了 群集唯一索引 ix_1在两列上: Table1_IDObject_CreationDate

我想运行两个查询:
1.

Select * from [dbo].MyView
where Table1_ID = 10

2.

 Select * from [dbo].MyView
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()

1-ST查询快速运行(即使 DBCC DropCleanBuffers())并通过使用MyView和IX_1使用简单的执行计划
2-nd查询运行不太快,因为它使用“旧”执行计划(在三个表中通过几个索引并嵌套循环寻求)

我误解了这种情况。至于我,这是自然使用ix_1和 我的观点 对于2 nd查询。
此外,我等待2 nd查询的运行速度相同,甚至比1-ST更快,因为它使用了两个列 在哪里条款 在群集索引中。

我尝试运行2 nd查询 with(index=IX_1) 并更新列的统计信息,但仍具有相同的执行计划。

是否有可能强制使用SQL 我的观点ix_1 ?

有帮助吗?

解决方案

除非您使用企业/开发人员版本,否则您需要包括 带有不超过的提示

 Select * from [dbo].MyView WITH (NOEXPAND)
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()

设计索引视图:

可以在SQL Server 2008的任何版本中创建索引视图。在SQL Server 2008 Enterprise中,查询优化器会自动考虑索引视图。要在所有其他版本中使用索引视图,必须使用NoExpand表提示。

(并且开发人员版基本上是企业版,具有不同的许可)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top