Есть несколько понятий и терминов, которые важно понимать при работе с индексами. Поиск, сканирование и поиск - вот некоторые из способов использования индексов через операторы select. Избирательность ключевых столбцов является неотъемлемой частью определения эффективности индекса.
Поиск происходит, когда оптимизатор запросов SQL Server определяет, что лучший способ найти запрошенные вами данные - это сканирование диапазона в индексе. Поиск обычно происходит, когда запрос «покрывается» индексом, что означает, что предикаты поиска находятся в ключе индекса, а отображаемые столбцы либо в ключе, либо включены. Сканирование происходит, когда оптимизатор запросов SQL Server определяет, что наилучшим способом поиска данных является сканирование всего индекса, а затем фильтрация результатов. Поиск обычно происходит, когда индекс не включает все запрошенные столбцы, либо в ключе индекса, либо во включенных столбцах. Затем оптимизатор запросов будет использовать кластеризованный ключ (для кластеризованного индекса) или RID (для кучи) для «поиска» других запрошенных столбцов.
Как правило, операции поиска более эффективны, чем сканирование, из-за физического запроса меньшего набора данных. Существуют ситуации, когда это не так, например, очень маленький набор начальных данных, но это выходит за рамки вашего вопроса.
Теперь вы спросили, как определить, насколько эффективен индекс, и есть несколько вещей, о которых следует помнить. Ключевые столбцы кластерного индекса называются ключом кластеризации. Так записи делаются уникальными в контексте кластерного индекса. Все некластеризованные индексы будут включать кластеризованный ключ по умолчанию, чтобы при необходимости выполнять поиск. Все индексы будут вставляться, обновляться или удаляться для каждого соответствующего оператора DML. Тем не менее, лучше всего сбалансировать выигрыш в производительности в операторах выбора с показателями производительности в операторах вставки, удаления и обновления.
Чтобы определить, насколько эффективен индекс, вы должны определить селективность ключей индекса. Избирательность может быть определена как процентное соотношение отдельных записей к общему количеству записей. Если у меня есть таблица [person] со 100 записями, а столбец [first_name] содержит 90 различных значений, мы можем сказать, что столбец [first_name] селективен на 90%. Чем выше селективность, тем эффективнее индексный ключ. Помня о селективности, лучше всего указывать наиболее селективные столбцы в ключе индекса. Используя мой предыдущий пример [person], что если бы у нас был столбец [last_name], который был на 95% избирательным? Мы бы хотели создать индекс с [last_name], [first_name] в качестве ключа индекса.
Я знаю, что это был довольно скучный ответ, но на самом деле многое зависит от того, насколько эффективным будет индекс, и с многими вещами, с которыми вы должны сравнивать любое повышение производительности.