我刚将我的大型数据库从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语句来强制使用索引,我只需要它自动执行它就像使用它一样。任何想法为什么会发生这种情况?
由于
答案 0 :(得分:2)
表统计信息丢失可能会导致查询缓存错误计划,因此现在正在重复使用。尝试使用UPDATE STATISTICS dbo.tblParents
以及子表更新统计信息。然后使用DBCC FREEPROCCACHE
清除查询计划。如果您可以在sys.dm_exec_cached_plans
中找到您的查询,那么您可以清除该特定查询的计划,这是首选。有关删除特定查询计划的详细信息,请查看DBCC FREEPROCCACHE
上的文档。