Создание некластеризованных индексов
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Некластеризованные индексы можно создавать в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Некластеризованный индекс — это структура индекса, отделенная от данных, хранящихся в таблице, и переупорядочивающая один или несколько выделенных столбцов. Некластеризованные индексы часто помогают быстрее находить данные, чем поиск в базовой таблице; Иногда запросы могут быть полностью отвечать данными в некластеризованном индексе, или некластеризованный индекс может указывать ядро СУБД на строки в базовой таблице. Обычно некластеризованные индексы создаются с целью повышения производительности часто используемых запросов, не входящих в кластеризованный индекс, либо для поиска строк таблицы, не имеющей кластеризованного индекса (которая называется кучей). Можно создать несколько некластеризованных индексов для таблицы или индексированного представления.
Подготовка к работе
Типичные реализации
Некластеризованные индексы реализуются следующим образом.
Ограничения UNIQUE
При создании ограничения UNIQUE создается уникальный некластеризованный индекс. Он нужен, чтобы принудительно применять ограничение UNIQUE по умолчанию. Если кластеризованный индекс в таблице еще не создан, то можно указать уникальный кластеризованный индекс. Дополнительные сведения см. в статье Ограничения уникальности и проверочные ограничения.
Индекс, не зависящий от ограничения
По умолчанию некластеризованный индекс создается в том случае, если ранее не был задан кластеризованный индекс. Для таблицы может быть создано не более 999 некластеризованных индексов. В это число входят любые индексы, созданные ограничениями PRIMARY KEY или UNIQUE, но не входят XML-индексы.
Некластеризованный индекс в индексированном представлении
Некластеризованные индексы в представлении могут создаваться только после создания в нем уникального кластеризованного индекса. Дополнительные сведения см. в разделе "Создание индексированных представлений".
Безопасность
Разрешения
Необходимо разрешение ALTER для таблицы или представления. Пользователь должен быть членом предопределенной роли сервера sysadmin или предопределенных ролей базы данных db_ddladmin и db_owner.
Использование среды SQL Server Management Studio
Создание некластеризованного индекса с помощью конструктора таблиц
В обозревателе объектов разверните базу данных, содержащую таблицу, в которой необходимо создать некластеризованный индекс.
Разверните папку Таблицы.
Щелкните правой кнопкой мыши таблицу, в которой нужно создать некластеризованный индекс, и выберите пункт Конструктор.
Щелкните правой кнопкой мыши столбец, для которого нужно создать некластеризованный индекс, и выберите Индексы/Ключи.
В диалоговом окне Индексы и ключи нажмите Добавить.
Выберите новый индекс в текстовом поле Выбранный первичный/уникальный ключ или индекс .
В сетке выберите "Создать как кластеризованный" и выберите "Нет " в раскрывающемся списке справа от свойства.
Выберите Закрыть.
В меню "Файл" выберите "Сохранить table_name".
Создание некластеризованного индекса в обозревателе объектов
В обозревателе объектов разверните базу данных, содержащую таблицу, в которой необходимо создать некластеризованный индекс.
Разверните папку Таблицы.
Разверните таблицу, для которой необходимо создать некластеризованный индекс.
Щелкните правой кнопкой мыши папку Индексы, выберите Создать индекс и Некластеризованный индекс...
В диалоговом окне Создание индекса на странице Общие введите имя нового индекса в поле Имя индекса .
В разделе Ключевые столбцы индекса выберите Добавить….
В диалоговом окне "Выбор столбцов" из table_name установите флажок или флажки столбца таблицы или столбцов, которые будут добавлены в некластеризованный индекс.
Нажмите ОК.
В диалоговом окне "Создать индекс" нажмите кнопку "ОК".
Использование Transact-SQL
Создание некластеризованного индекса в таблице с помощью Transact-SQL
В обозреватель объектов подключитесь к экземпляру ядро СУБД с
AdventureWorks2022
установленным. Вы можете скачатьAdventureWorks2022
из примеров баз данных.На стандартной панели выберите пункт Создать запрос.
Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
USE AdventureWorks2022; GO -- Find an existing index named IX_ProductVendor_VendorID and delete it if found. IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_ProductVendor_VendorID') DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor; GO -- Create a nonclustered index called IX_ProductVendor_VendorID -- on the Purchasing.ProductVendor table using the BusinessEntityID column. CREATE NONCLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor (BusinessEntityID); GO