Создание и использование индексов
Создание индексов
Создание индекса не представляет особых сложностей. Кластеризованные и некластеризованные индексы создаются аналогичным образом с помощью мастеров в Enterprise Manager или с помощью команды SQL CREATE INDEX. В этом разделе вы узнаете, как создавать индексы с помощью этих двух методов, как использовать коэффициент заполнения и как применять хранимые процедуры для создания полнотекстового индекса.

Использование мастера Create Index Wizard
Очевидно, что если вы хотите создать индекс по какой-либо таблице, эта таблица уже должна существовать в базе данных. Вы можете использовать мастер создания индекса Create Index Wizard для создания кластеризованного или некластеризованного индекса по таблице с помощью следующих шагов:
- Откройте Enterprise Manager и щелкните на кнопке Wizards (Мастера) в меню Tools. Появится диалоговое окно Select Wizard (Выбор мастера). В данном примере мы будем использовать базу данных Northwind.
- Раскройте папку Database (База данных), выберите Create Index Wizard и затем щелкните на кнопке OK.
- Появится начальное окно мастера Create Index Wizard (рис. 17.9). Отметим, что выбранные вами имя сервера и имя базы данных появятся в линейке заголовка. В данном примере выбраны сервер W2KSERVER и база данных Northwind.
- Щелкните на кнопке Next (Далее), чтобы появилось окно Select Database аnd Table (Выбор базы данных и таблицы) (рис. 17.10). Здесь вы можете указать базу данных и таблицу, по которой хотите создать индекс. По умолчанию выбрана база данных, которую вы указали при запуске мастера. Представлена также используемая по умолчанию таблица этой базы данных.
- Щелкните на кнопке Next, чтобы перейти к окну Current Index Information (Информация о текущих индексах) (рис. 17.11). В данном примере используется таблица Customers, поскольку она содержит большое число строк. Как видите, небольшое число индексов уже создано по таблице Customers, включая один кластеризованный индекс и четыре некластеризованных индекса. Напомним, что вы можете создать только один кластеризованный индекс по таблице, что делает ее кластеризованной таблицей. Все индексы, созданные по таблице Customers, – это простые индексы, созданные по различным колонкам. Когда оптимизатор запросов анализирует запрос для выбора плана исполнения данного запроса, он выбирает для использования нужный индекс, исходя из имеющихся индексов и предиката в предложении WHERE.
- Щелкните на кнопке Next, чтобы появилось окно Select Columns (Выбор колонок) (рис. 17.12). Это окно позволяет вам выбирать колонки для включения в данный индекс. На данный момент порядок колонок не имеет значения – вы сможете изменить его позже.
- Задайте колонки, которые хотите включить в данный индекс, путем установки флажков справа от имен колонок. В данном примере мы создадим составной индекс по колонкам CompАnyName, ContАсtName и Region.
- Щелкните на кнопке Next, чтобы появилось окно Specify Index Options (Задание параметров индекса) (рис. 17.13). В этом окне вы можете задать несколько важных параметров, которые определяют, как будет создаваться индекс. Вы можете установить флажок Make this a clustered index (Сделать этот индекс кластеризованным), чтобы это был кластеризованный индекс. В данном примере флажок, используемый для создания кластеризованного индекса, недоступен, поскольку кластеризованный индекс по таблице Customers уже создан.
Вы можете установить флажок Make this a unique index (Сделать этот индекс уникальным), если хотите, чтобы он был уникальным. Вы можете также задать коэффициент заполнения (Fill fАсtor) как оптимальный (Optimal) или фиксированный (Fixed). Поскольку строки индекса хранятся в отсортированном порядке, системе SQL Server может потребоваться перемещение данных для поддержания этого порядка. Коэффициент заполнения указывает, насколько плотно должны размещаться данные в новом индексе, чтобы оставалось место для будущих вставок. Принятый по умолчанию коэффициент заполнения (который вы получаете, если щелкнуть на кнопке выбора Optimal) равен 0, что означает плотное заполнение узлов-листьев, но свободное пространство в вышележащих узлах индекса. (Подробнее о коэффициенте заполнения см. в разделе "Использование коэффициента заполнения для предупреждения расщеплений страниц" далее.)
- Выберите ваши параметры индекса и затем щелкните на кнопке Next, чтобы появилось окно Completing the Create Index Wizard (Завершение работы мастера создания индекса) (рис. 17.14). В этом окне вы можете изменить порядок колонок, образующих индекс. Просто выделите колонку, которую хотите переместить, и щелкайте на кнопке Move Up (Вверх) или Move Down (Вниз), пока данная колонка не окажется в нужном месте. Вы можете также задать в этом окне имя индекса.
Порядок колонок в составном индексе имеет важное значение. Оператор SQL может использовать преимущества индекса, только если в предложении WHERE этого оператора указана ведущая часть индекса. На рис. 17.15 показано то же окно с измененным именем индекса (CustomerAreaIndex) и другим порядком колонок – Region, CompАnyName, ContАсtName.
При таком порядке колонок оператор SQL должен содержать Region в своем предложении WHERE , чтобы использовать преимущества индекса, поскольку Region – это ведущая колонка. Конечно, оператор может содержать в своем предложении WHERE Region и CompАnyName или даже Region, CompАnyName и ContАсtName. Используя в предложении WHERE все три значения, вы получаете наилучшую производительность, поскольку будет выполнено минимальное количество операций ввода-вывода. И тогда уже не имеет значения, в каком порядке имена колонок указаны в предложении WHERE . - Если вас удовлетворяет порядок колонок, щелкните на кнопке Finish (Готово), после чего будет создан индекс. Этот процесс может занять от нескольких секунд до нескольких часов в зависимости от количества данных, производительности системы, производительности дисководов и памяти системы. Для создания индекса по таблице SQL Server должен прочитать все данные таблицы, поэтому время варьируется в таких широких пределах.
Внимание. Если вы создаете уникальный индекс и в ключе индекса обнаружены дублированные значения, процесс создания индекса прекращается.