Є кілька понять і термінів, які важливо розуміти при роботі з індексами. Пошук, сканування та пошук - це деякі із способів використання індексів через обрані оператори. Вибірковість ключових стовпців є невід'ємною частиною визначення ефективності індексу.
Шукання відбувається, коли оптимізатор запитів SQL Server визначає, що найкращим способом пошуку запитуваних даних є сканування діапазону в індексі. Шукання зазвичай трапляються, коли запит "охоплений" індексом, а це означає, що предикати пошукових запитів знаходяться в індексному ключі, а стовпці, що відображаються, знаходяться або в ключі, або входять до них. Сканування відбувається, коли оптимізатор запитів SQL Server визначає, що найкращим способом пошуку даних є сканування всього індексу, а потім фільтрування результатів. Пошук зазвичай відбувається, коли індекс не включає всіх запитуваних стовпців, ні в індексному ключі, ні у включених стовпцях. Потім оптимізатор запитів використовуватиме кластерний ключ (проти кластерного індексу) або RID (проти купи) для "пошуку" інших запитуваних стовпців.
Зазвичай операції пошуку є більш ефективними, ніж сканування, завдяки фізичному запиту меншого набору даних. Бувають ситуації, коли це не так, наприклад, дуже невеликий початковий набір даних, але це виходить за рамки вашого питання.
Тепер ви запитали, як визначити, наскільки ефективний індекс, і слід пам’ятати про кілька речей. Ключові стовпчики кластеризованого індексу називаються ключем кластеризації. Ось як записи робляться унікальними в контексті кластерного індексу. Усі некластеризовані індекси за замовчуванням включають кластерний ключ, щоб виконувати пошук при необхідності. Всі індекси будуть вставлені до, оновлені або видалені з кожного відповідного оператора DML. Зважаючи на це, найкраще врівноважувати підвищення продуктивності у вибраних операторах та показниках ефективності в операторах вставлення, видалення та оновлення.
Для того, щоб визначити, наскільки ефективний індекс, ви повинні визначити вибірковість своїх індексних ключів. Селективність можна визначити у відсотках від різних чітких записів до загальних записів. Якщо у мене є таблиця [person] зі 100 загальними записами, а стовпець [first_name] містить 90 різних значень, можна сказати, що стовпець [first_name] є 90% вибірковим. Чим вище селективність, тим ефективніше індексний ключ. Маючи на увазі вибірковість, найкраще спочатку помістити свої найбільш селективні стовпці в індексний ключ. Використовуючи мій попередній приклад [person], що робити, якщо у нас був стовпець [прізвище], який на 95% був вибірчим? Ми хотіли б створити індекс із [last_name], [first_name] як індексний ключ.
Я знаю, що це була трохи завзята відповідь, але насправді існує багато речей, які визначають, наскільки ефективним буде показник, і багато речей, з якими ви повинні зважити будь-які підвищення ефективності.