gpt4 book ai didi

sql-server - SQL Server 2008 R2 和索引 View 中的执行计划

转载 作者:行者123 更新时间:2023-12-04 17:46:35 24 4
gpt4 key购买 nike

我创建了一个由三列组成的索引 View (MyView):

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()

第一个查询运行速度很快(即使使用DBCC DROPCLEANBUFFERS()),并通过使用 MyView 和 IX_1 使用简单的执行计划
第二个查询运行得不太快,因为它使用“旧”执行计划(通过三个表中的多个索引和嵌套循环进行查找)

我误解了这种情况。对于我来说,很自然地使用 IX_1 和 MyView 进行第二次查询。
此外,我等待第二个查询的运行速度与第一个查询的速度相同甚至更快,因为它使用了聚集索引中的两列in where 子句

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

是否可以强制 sql 使用 MyViewIX_1

最佳答案

除非您使用企业/开发人员版,否则您需要包含 WITH NOEXPAND hint

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

来自Designing Indexed Views :

Indexed views can be created in any edition of SQL Server 2008. In SQL Server 2008 Enterprise, the query optimizer automatically considers the indexed view. To use an indexed view in all other editions, the NOEXPAND table hint must be used.

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

关于sql-server - SQL Server 2008 R2 和索引 View 中的执行计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4427916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com