Точний ліміт насправді важко визначити достроково.
Одне, що більшість людей недооцінюють, - це високі вимоги, які повинен виконувати індекс, перш ніж він стане кандидатом для використання у запиті.
Ефективний (некластеризований) індекс
пропонує велику вибірковість , наприклад, повертає лише дуже невеликий відсоток (<1%, <2%) від загальної кількості рядків. Якщо вибірковість не задана - оптимізатор запитів SQL Server, швидше за все, ігнорує цей індекс
в ідеалі має охоплювати запит, тобто повертати всі стовпці, необхідні для запиту. Якщо ви можете створити індекс, що містить 1 або 2 стовпчики індексу, і включає ще декілька (2-4) стовпців як включені стовпці, і таким чином ви можете охопити запит - тоді ймовірність оптимізатора запитів буде використовувати цей індекс. Що також означає: якщо ваш код завжди використовується SELECT * .....
для отримання всіх стовпців , ймовірність використання індексів знижується - досить кардинально, насправді
Я впевнений, що існує також ряд інших критеріїв - але я вважаю, що ці два є найважливішими. Звичайно, ви завжди повинні підтримувати свої індекси належним чином (реорганізовувати, перебудовувати) та стежити за тим, щоб статистика, пов’язана з вашими індексами, була актуальною.
PS: некластеризовані індекси стовпців із зовнішніми ключами є окремим випадком; за замовчуванням я завжди рекомендую додавати їх, оскільки вони допомагають пришвидшити як референтну перевірку цілісності, так і JOIN
'ті обмеження ФК. Але навіть тут абсолютно "розширити" ці індекси стовпців FK, додавши додаткові колонки "включити", щоб зробити їх ще кориснішими.