У меня есть таблицы Log и LogItem; Я пишу запрос, чтобы получить некоторые данные из обоих. Есть тысячи, Logs
и каждый Log
может иметь до 125LogItems
Данный запрос сложен, поэтому я его пропускаю (если кто-то считает, что это важно, я, вероятно, могу опубликовать его), но когда я запустил план оценочных запросов 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 или менее.