У меня есть таблицы Log и LogItem;Я пишу запрос, чтобы получить некоторые данные из обоих.Существуют тысячи Logs
, и у каждого Log
может быть до 125 LogItems
Вопрос сложный, поэтому я его пропускаю (если кто-то считает, что это важно, я, вероятно, могу опубликовать его), но когда я запустил план оценочных запросов SSMS, он сказал мне, что новый некластеризованный индекс повысит производительность до 100%.
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Ради интереса я создал этот новый индекс и выполнил запрос иК моему большому удивлению, теперь мой запрос выполняется ~ 1 секунда, тогда как раньше было 10+ секунд.
Я предполагал, что мой существующий индекс будет охватывать этот новый запрос, поэтому мой вопрос - почему я создалновый индекс только для столбцов, используемых в моем новом запросе, повышает производительность?Должен ли я иметь индекс для каждой уникальной комбинации столбцов, используемых в моих предложениях where
?
примечание: я не думаю, что это потому, что SQL Server кэширует мои результаты, я выполнил запроспримерно 25-30 раз до того, как я создал индекс, и он постоянно занимал 10-15 секунд, после индекса он теперь постоянно равен ~ 1 или меньше.