索引未被使用

时间:2016-01-04 18:28:19

标签: sql sql-server indexing sql-server-2014

我刚将我的大型数据库从SQL Server 2012迁移到SQL Server 2014,并且遇到了未使用索引的体验问题。

问题只发生在我SELECT SELECT IN WHERE SELECT * FROM tblChildren WHERE ParentID IN (SELECT ParentID FROM tblParents WHERE Office = 1) tblChildren

例如:

ParentID

索引位于SELECT * FROM tblChildren WHERE ParentID IN (1, 2, 3) ,列SELECT * FROM tblChildren WHERE ParentID = 1

以下语句触发索引就好了:

includes

where

我不想更改任何代码或SQL语句来强制使用索引,我只需要它自动执行它就像使用它一样。任何想法为什么会发生这种情况?

由于

1 个答案:

答案 0 :(得分:2)

表统计信息丢失可能会导致查询缓存错误计划,因此现在正在重复使用。尝试使用UPDATE STATISTICS dbo.tblParents以及子表更新统计信息。然后使用DBCC FREEPROCCACHE清除查询计划。如果您可以在sys.dm_exec_cached_plans中找到您的查询,那么您可以清除该特定查询的计划,这是首选。有关删除特定查询计划的详细信息,请查看DBCC FREEPROCCACHE上的文档。