我有一个运行缓慢的更新查询(请参阅下面的第一个查询)。我在PhoneStatus 表和PhoneID 列上创建了一个索引,名为IX_PhoneStatus_PhoneID。 Table PhoneStatus 包含 2000 万条记录。当我运行以下查询时,没有使用索引,而是使用了聚集索引扫描,反过来更新运行缓慢。
UPDATE PhoneStatus
SET RecordEndDate = GETDATE()
WHERE PhoneID = 126
如果我执行以下查询(其中包括新的 FROM),我仍然遇到未使用索引的相同问题。
UPDATE PhoneStatus
SET RecordEndDate = GETDATE()
FROM Cust_Profile.PhoneStatus
WHERE PhoneID = 126
但是,如果我添加 HINT 以强制在 FROM 上使用索引,则它可以正常工作,并且使用了索引查找。
UPDATE PhoneStatus
SET RecordEndDate = GETDATE()
FROM Cust_Profile.PhoneStatus WITH(INDEX(IX_PhoneStatus_PhoneID))
WHERE PhoneID = 126
有谁知道为什么第一个查询不使用索引?
更新
2000万条记录表中,每个phoneID最多出现10次
巴德夫
最佳答案
20M 表中有多少个不同的 PhoneID?如果条件where PhoneID=126
不够挑剔,你可能打到指数tipping point .如果此查询和访问条件非常频繁,PhoneID 是聚集索引最左键的良好候选者。
关于sql-server - SQL Server 更新查询不使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524871/