索引未被使用

Indexes not being used

我刚刚将我的大型数据库从 SQL Server 2012 移至 SQL Server 2014,遇到索引未被使用的问题。

仅当我在 WHERE 子句中使用 INSELECT 中使用 SELECT 时才会出现此问题。

例如:

SELECT * 
FROM tblChildren 
WHERE ParentID IN (SELECT ParentID 
                   FROM tblParents 
                   WHERE Office = 1)

索引在 tblChildrenParentID

以下语句可以很好地触发索引:

SELECT * 
FROM tblChildren 
WHERE ParentID IN (1, 2, 3)

SELECT * 
FROM tblChildren 
WHERE ParentID = 1

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

谢谢

可能 table 统计数据丢失,并且因此为查询缓存了一个错误的计划,现在正在重用。尝试使用 UPDATE STATISTICS dbo.tblParents 和 child table 更新统计信息。然后使用 DBCC FREEPROCCACHE 清除查询计划。如果您可以在 sys.dm_exec_cached_plans 中找到您的查询,那么您可以清除该特定查询的计划,这是首选。查看 DBCC FREEPROCCACHE 上的文档以获取有关删除特定查询计划的更多信息。