Я работаю над улучшением производительности SQL. И SQL Server Management Studio дал мне удивительный совет. Ради примера я собираюсь упростить структуру таблиц и рекомендации, которые дали SSMS.
Структура таблицы Персона :
- ID
- first_name
- last_name
- date_of_birth
- Адрес электронной почты
У меня был конкретный запрос, для которого я показал план выполнения. Потом я увидел совет, который дал SSMS, и это меня немного удивило. Рекомендуется добавить два индекса со следующей сигнатурой, которые должны повысить производительность на 41% и 53% соответственно:
CREATE NONCLUSTERED INDEX [person_1]
ON [Person]([first_name],[last_name])
INCLUDE ([id],[date_of_birth],[email])
CREATE NONCLUSTERED INDEX [person_2]
ON [Person]([first_name],[last_name])
INCLUDE ([id],[email])
Эти два индекса находятся в одинаковых столбцах. Только столбцы INCLUDE отличаются. Насколько я понимаю из чтения об индексах, первый индекс также включает в себя данные для второго индекса. Так почему же SSMS рекомендует второй индекс, а первый уже содержит необходимые данные?