Почему создание этого нового индекса так сильно повысило производительность, когда существующий индекс включал все столбцы в новый индекс?

У меня есть таблицы журнала и 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 или меньше.

5
задан Nate 19 December 2011 в 18:15
поделиться