У меня запрос на обновление, который выполняется медленно (см. Первый запрос ниже). У меня есть индекс, созданный для таблицы 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