SQL Server更新查询不使用索引

Mik*_*Dev 5 sql-server indexing performance

我有一个运行缓慢的更新查询(请参阅下面的第一个查询).我在PhoneStatus表和PhoneID列上创建了一个名为IX_PhoneStatus_PhoneID的索引.Table PhoneStatus包含2000万条记录.当我运行以下查询时,不使用索引并使用聚簇索引扫描,反过来更新运行缓慢.

UPDATE PhoneStatus    
SET RecordEndDate = GETDATE()    
WHERE PhoneID = 126  
Run Code Online (Sandbox Code Playgroud)

如果我执行以下查询,其中包括新的FROM,我仍然遇到与未使用的索引相同的问题.

UPDATE PhoneStatus    
SET RecordEndDate = GETDATE()   
FROM Cust_Profile.PhoneStatus     
WHERE PhoneID = 126 
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加HINT以强制在FROM上使用索引它可以正常工作,并使用索引搜索.

UPDATE PhoneStatus     
SET RecordEndDate = GETDATE()   
FROM Cust_Profile.PhoneStatus WITH(INDEX(IX_PhoneStatus_PhoneID))   
WHERE PhoneID = 126    
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么第一个查询不会使用索引?

更新

在包含2000万条记录的表中,每个phoneID最多可以显示10次

BarDev

Rem*_*anu 5

20M表中有多少个不同的PhoneID?如果条件where PhoneID=126不够有选择性,您可能会达到索引引爆点.如果此查询和访问条件非常频繁,则PhoneID是群集索引最左侧密钥的良好候选.

  • 关于聚集索引的快速评论.有2000万行,如果您插入数据并且表具有聚簇索引,您可能会看到合理的延迟,而表重新组织自身以反映聚簇索引. (3认同)