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