У меня есть таблицы журнала и LogItem; Я пишу запрос, чтобы получить данные от обоих. Существуют тысячи журналов
, и каждый журнал
может содержать до 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 или меньше.