Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00
Лекция 17:

Создание и использование индексов

Создание индексов

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

Примечание. Мастера проще для использования, но если вы будет повторять операции или создавать несколько аналогичных баз данных, то вам, возможно, будет удобнее использовать сценарии. Сценарии позволяют как документировать, так и воспроизводить процесс создания.
Использование мастера Create Index Wizard

Очевидно, что если вы хотите создать индекс по какой-либо таблице, эта таблица уже должна существовать в базе данных. Вы можете использовать мастер создания индекса Create Index Wizard для создания кластеризованного или некластеризованного индекса по таблице с помощью следующих шагов:

  1. Откройте Enterprise Manager и щелкните на кнопке Wizards (Мастера) в меню Tools. Появится диалоговое окно Select Wizard (Выбор мастера). В данном примере мы будем использовать базу данных Northwind.
  2. Раскройте папку Database (База данных), выберите Create Index Wizard и затем щелкните на кнопке OK.
  3. Появится начальное окно мастера Create Index Wizard (рис. 17.9). Отметим, что выбранные вами имя сервера и имя базы данных появятся в линейке заголовка. В данном примере выбраны сервер W2KSERVER и база данных Northwind.
     Начальное окно мастера Create Index Wizard

    Рис. 17.9. Начальное окно мастера Create Index Wizard
  4. Щелкните на кнопке Next (Далее), чтобы появилось окно Select Database аnd Table (Выбор базы данных и таблицы) (рис. 17.10). Здесь вы можете указать базу данных и таблицу, по которой хотите создать индекс. По умолчанию выбрана база данных, которую вы указали при запуске мастера. Представлена также используемая по умолчанию таблица этой базы данных.
     Окно Select Database аnd Table (Выбор базы данных и таблицы)

    Рис. 17.10. Окно Select Database аnd Table (Выбор базы данных и таблицы)
  5. Щелкните на кнопке Next, чтобы перейти к окну Current Index Information (Информация о текущих индексах) (рис. 17.11). В данном примере используется таблица Customers, поскольку она содержит большое число строк. Как видите, небольшое число индексов уже создано по таблице Customers, включая один кластеризованный индекс и четыре некластеризованных индекса. Напомним, что вы можете создать только один кластеризованный индекс по таблице, что делает ее кластеризованной таблицей.
     Окно Current Index Information (Информация о текущих индексах)

    Рис. 17.11. Окно Current Index Information (Информация о текущих индексах)
    Все индексы, созданные по таблице Customers, – это простые индексы, созданные по различным колонкам. Когда оптимизатор запросов анализирует запрос для выбора плана исполнения данного запроса, он выбирает для использования нужный индекс, исходя из имеющихся индексов и предиката в предложении WHERE.
  6. Щелкните на кнопке Next, чтобы появилось окно Select Columns (Выбор колонок) (рис. 17.12). Это окно позволяет вам выбирать колонки для включения в данный индекс. На данный момент порядок колонок не имеет значения – вы сможете изменить его позже.
      Окно Select Columns (Выбор колонок)

    Рис. 17.12. Окно Select Columns (Выбор колонок)
  7. Задайте колонки, которые хотите включить в данный индекс, путем установки флажков справа от имен колонок. В данном примере мы создадим составной индекс по колонкам CompАnyName, ContАсtName и Region.
  8. Щелкните на кнопке 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, что означает плотное заполнение узлов-листьев, но свободное пространство в вышележащих узлах индекса. (Подробнее о коэффициенте заполнения см. в разделе "Использование коэффициента заполнения для предупреждения расщеплений страниц" далее.)

       Окно Specify Index Options

    Рис. 17.13. Окно Specify Index Options
  9. Выберите ваши параметры индекса и затем щелкните на кнопке Next, чтобы появилось окно Completing the Create Index Wizard (Завершение работы мастера создания индекса) (рис. 17.14). В этом окне вы можете изменить порядок колонок, образующих индекс. Просто выделите колонку, которую хотите переместить, и щелкайте на кнопке Move Up (Вверх) или Move Down (Вниз), пока данная колонка не окажется в нужном месте. Вы можете также задать в этом окне имя индекса.

    Порядок колонок в составном индексе имеет важное значение. Оператор SQL может использовать преимущества индекса, только если в предложении WHERE этого оператора указана ведущая часть индекса. На рис. 17.15 показано то же окно с измененным именем индекса (CustomerAreaIndex) и другим порядком колонок – Region, CompАnyName, ContАсtName.

      Окно Completing the Create Index Wizard

    Рис. 17.14. Окно Completing the Create Index Wizard
       Изменение порядка колонок

    Рис. 17.15. Изменение порядка колонок
    При таком порядке колонок оператор SQL должен содержать Region в своем предложении WHERE , чтобы использовать преимущества индекса, поскольку Region – это ведущая колонка. Конечно, оператор может содержать в своем предложении WHERE Region и CompАnyName или даже Region, CompАnyName и ContАсtName. Используя в предложении WHERE все три значения, вы получаете наилучшую производительность, поскольку будет выполнено минимальное количество операций ввода-вывода. И тогда уже не имеет значения, в каком порядке имена колонок указаны в предложении WHERE .
  10. Если вас удовлетворяет порядок колонок, щелкните на кнопке Finish (Готово), после чего будет создан индекс. Этот процесс может занять от нескольких секунд до нескольких часов в зависимости от количества данных, производительности системы, производительности дисководов и памяти системы. Для создания индекса по таблице SQL Server должен прочитать все данные таблицы, поэтому время варьируется в таких широких пределах.
    Внимание. Если вы создаете уникальный индекс и в ключе индекса обнаружены дублированные значения, процесс создания индекса прекращается.
    Создание индекса с помощью мастера Create Index Wizard происходит просто, но этот процесс имеет некоторые недостатки. В частности, поскольку мастер Create Index Wizard не поддерживает информацию о задачах, которые выполняются с его помощью, вам приходится проходить через процесс, описанный в этом разделе, каждый раз, как вы создаете новый индекс. Если вы создаете индекс с помощью файла сценария, то можете использовать этот файл снова и снова. Кроме того, если вы хотите повторно создать базу данных, то должны снова пройти через все шаги мастера Create Index Wizard для каждого индекса базы данных. Напомним, однако, что после создания индексов вы можете генерировать для них сценарии SQL с помощью Enterprise Manager.