У мене є таблиці 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 менш.