Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Индекс помогает SQL Server быстро извлекать данные из строк. Индексы работают как оглавление в начале книги, позволяя вам быстро найти страницу, на которой находится тема. Без индексов SQL Server должен сканировать все строки в таблице, чтобы найти запись.

В SQL Server существует два типа индексов: кластеризованные и некластеризованные. Узнайте разницу между кластеризованными и некластеризованными индексами и почему они важны.

Кластерный индекс в SQL Server

В кластеризованном индексе строки данных физически хранятся в упорядоченном виде на основе значения ключа. Поскольку индекс включает таблицу и может упорядочивать строки только в одном порядке, вы можете создать только один кластеризованный индекс для каждой таблицы.

В то время как индексы ускоряют извлечение строк в диапазоне, Операторы INSERT и UPDATE может быть медленным, поскольку оптимизатор запросов сканирует индекс по порядку, пока не найдет целевой индекс.

instagram viewer

Некластеризованный индекс в SQL Server

Некластеризованный индекс содержит ключевые значения, записью которых является указатель, называемый локатором строк. Для кластеризованных таблиц (таблиц с кластеризованным индексом) указатель указывает на ключ в кластеризованном индексе, который, в свою очередь, указывает на строку в таблице. Для строк без кластеризованного индекса указатель указывает непосредственно на строку таблицы.

Как создать кластеризованный индекс в SQL Server

Когда вы создаете таблицу с первичным ключом, SQL Server автоматически создает ключ кластеризованного индекса на основе этого первичного ключа. Если у вас нет первичного ключа, вы можете выполнить следующую инструкцию, чтобы создать ключ кластеризованного индекса.

СОЗДАВАТЬ ГРУППА ИНДЕКС <индексимя>
НА СТОЛЕ <имя_таблицы>(имя_столбца)

В этом операторе вы указываете имя индекса, имя таблицы для его создания и имя столбца для использования в индексе.

Если вы добавите первичный ключ в таблицу, в которой уже есть кластеризованный индекс, SQL Server создаст с ним некластеризованный индекс.

Чтобы создать кластеризованный индекс, который не включает столбец первичного ключа, необходимо сначала удалить ограничение первичного ключа.

ИСПОЛЬЗОВАТЬимя_базы_данных
ИЗМЕНИТЬСТОЛ имя_таблицы
УРОНИТЬОГРАНИЧЕНИЕ pk_name
ИДТИ

Удаление ограничений первичного ключа также удаляет кластеризованный индекс, что позволяет создать собственный.

Как создать некластеризованный индекс в SQL Server

Чтобы создать некластеризованный индекс, используйте следующую инструкцию.

СОЗДАВАТЬИНДЕКС <индексимя>
НА СТОЛЕ <имя_таблицы>(имя_столбца)

Вы также можете использовать ключевое слово NONCLUSTERED следующим образом:

СОЗДАВАТЬ [НЕ КЛАСТЕРИРОВАНО] ИНДЕКС <индексимя>
НА СТОЛЕ <имя_таблицы>(имя_столбца)

Этот оператор создает некластеризованный индекс в указанной вами таблице и включает указанный вами столбец.

При желании вы можете отсортировать столбцы по возрастанию (ASC) или по убыванию (DESC).

СОЗДАВАТЬ [НЕ КЛАСТЕРИРОВАНО] ИНДЕКС <индексимя>
НА СТОЛЕ <имя_таблицы>(имя_столбца ASC/DESC)

Какой индекс выбрать?

Как кластеризованные, так и некластеризованные индексы сокращают время выполнения запросов. Если большинство ваших запросов представляют собой операции SELECT для нескольких столбцов таблицы, кластеризованные индексы работают быстрее. Однако для операций INSERT или UPDATE некластеризованные индексы работают быстрее, поскольку оптимизатор запросов может найти столбец непосредственно из индекса.

Как видите, эти индексы лучше всего подходят для различные SQL-запросы. Таким образом, большинству баз данных SQL будет полезно иметь по крайней мере один кластеризованный индекс и некластеризованные индексы для регулярно обновляемых столбцов.

Важность индексов в SQL Server

Кластеризованные и некластеризованные индексы обеспечивают более высокую производительность запросов. Когда вы запускаете запрос, оптимизатор запросов просматривает индекс в поисках места хранения строки, а затем извлекает информацию из этого места. Это намного быстрее, чем сканирование всех строк в таблице.

Вы также можете использовать некластеризованные индексы для устранения взаимоблокировок при поиске закладок, создав некластеризованный индекс для столбцов, к которым обращаются запросы.