Запрос на обновление SQL Server не использует индекс

У меня запрос на обновление, который выполняется медленно (см. Первый запрос ниже). У меня есть индекс, созданный для таблицы PhoneStatus и столбца PhoneID с именем IX_PhoneStatus_PhoneID. Таблица PhoneStatus содержит 20 миллионов записей. Когда я запускаю следующий запрос, индекс не используется, используется сканирование кластерного индекса, и, в свою очередь, обновление выполняется медленно.

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    

Кто-нибудь знает, почему первый запрос не будет использовать индекс?

Обновление

В таблице из 20 миллионов записей каждый идентификатор телефона может отображаться не более 10 раз

BarDev

5
задан Blue Magister 5 March 2014 в 22:56
поделиться