Create nonclustered index: Create Nonclustered Indexes — SQL Server

В чем разница между кластеризованными и некластеризованными индексами в Microsoft SQL Server?

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

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

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

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

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

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

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

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

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

 CREATE CLUSTERED INDEX <имя индекса> 
ON TABLE <имя_таблицы>(имя_столбца)

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

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

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

 USE имя_базы_данных 
ALTER TABLE имя_таблицы
DROP CONSTRAINT имя_pk
GO

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

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

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

 CREATE INDEX <имя индекса> 
ON TABLE <имя_таблицы>(имя_столбца)

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

 CREATE [NONCLUSTERED] INDEX <имя индекса> 
ON TABLE <имя_таблицы>(имя_столбца)

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

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

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

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

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

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

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

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

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

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

by Maheen Aboobakkar | 7 мая 2022 г.

Создать некластеризованные индексы в SQL Server можно с помощью SQL Server Management Studio или Transact-SQL. Давайте рассмотрим детали.

Bobcares предоставляет решения для любых запросов в рамках наших услуг по администрированию сервера .

Давайте подробнее рассмотрим, как создавать некластеризованные индексы в SQL Server

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

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

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

Строки данных не отсортированы физически в некластеризованном индексе. Он разделяет данные таблицы на структуру ключ-значение, где ключ содержит значения столбца, а каждое значение содержит указатель на строку данных, содержащую фактическое значение.

Синтаксис
Некластеризованный индекс имеет тот же синтаксис, что и кластеризованный индекс. Просто замените «NONCLUSTERED» на «CLUSTERED». Чтобы создать новый некластеризованный индекс для таблицы, используйте следующий синтаксис.

СОЗДАТЬ НЕКЛАСТЕРНЫЙ ИНДЕКС
ON (столбец)

Создайте некластеризованный индекс с помощью SSMS

  1. Во-первых, запустите SSMS. Создайте подключение к базе данных. Разверните таблицу, для которой вы хотите создать некластеризованный индекс, в обозревателе объектов.
  2. Выберите папку Indexes в контекстном меню. Как показано ниже, выберите «Новый индекс», затем «Некластеризованный индекс».
  3. На странице «Общие» диалогового окна «Новый индекс» в разделе «Имя индекса» присвойте новому индексу имя.
  4. Как показано ниже, нажмите кнопку «Добавить» в разделе «Ключевые столбцы индекса».
  5. Установите флажок для столбцов, для которых должен быть создан некластеризованный индекс, в диалоговом окне «Выбрать столбцы из таблицы».
  6. Наконец, сохраните таблицу, нажав кнопку «ОК».

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

    1. Разверните базу данных, содержащую таблицу, для которой вы хотите создать некластеризованный индекс в обозревателе объектов.
    2. Затем разверните папку Таблицы.
    3. Выберите Дизайн в контекстном меню таблицы, для которой вы хотите создать некластеризованный индекс.