Создание индексов
В базах данных для ускорения поиска информации в таблицах применяются специальные структуры - индексы. При отсутствии индексов сканирование записей таблицы осуществляется последовательно в порядке их физического размещения. Наличие индексов предполагает, что анализ записей производится в соответствие с возрастанием/убыванием значений полей, из которых сформирован индекс таблицы. Пользователи могут создать индексы, состоящие из любого числа полей таблицы в различных их сочетаниях. Формировать индексы таблицы имеют право:
Некоторые индексы создаются автоматически. Такие индексы формируются при определении первичных ключей и совокупностей полей с признаками уникальности.
Рассмотрим пример создания индексов. Одним из запросов администратора базы данных является выдача списка книг требуемого издательства, начиная с последних поступлений (). Для сокращения времени его выполнения необходимо создать в таблице Books индекс по возрастанию значений поля Publisher и убыванию значений поля Start_date. Назовем этот индекс Publ_Start_date. Формирование индекса следует начать с установления в утилите SQL Central соединение с базой данных Dubl_Biblia. Затем необходимо запустить мастер Add index, который вложен в папки Tables - Books - Indexes. Этот мастер предлагает выполнить ряд шагов. Каждый шаг представляется в виде отдельного окна. Работу мастера Add index рассмотрим по ранее применявшейся схеме () с разъяснением выполнения последовательности шагов, с анализом каждого шага.
Шаг 1. Начальная стадия создание индекса таблицы данных (рис. 58).
Рис. 58. Создание индекса таблицы данных
Пояснение. Добро пожаловать в Мастер создания индексов. Этот Мастер позволяет вам создать новый индекс таблицы данных.
Индексы, формируемые пользователями СУБД SQL Anywhere, предназначены для сокращения времени поиска данных.
Вопрос. Какое имя вы хотите дать новому индексу?
Ниже следует поле, в которое следует ввести имя создаваемого индекса. В нашем случае - это Publ_Start_date. После заполнения поля окна щелкните мышью по кнопке Далее для выполнения следующего шага.
Шаг 2. Определение условия формирования индекса (рис. 59).
Рис. 59. Определение условия формирования индекса
Вопрос. Какие поля будут использоваться при формирования индекса?
В приведенном ниже списке полей таблицы необходимо выделить одно из полей щелкнуть мышью по одной из кнопок.
Кнопка Add ASC позволяет включить в условие формирования индекса использование значений выделенного поля по возрастанию. Сделанный выбор отображается в окне Curent index. В случае необходимости использования значений выделенного поля по убыванию следует "нажать" на кнопку Add DESC. Кнопка Remove предназначена для исключения из индекса значений выделенного поля. Если требуется исключить из индекса все поля, воспользуйтесь кнопкой Remove All. Просмотреть свойства выделенного поля позволяет кнопка Details.
На рис. 59 представлен результат выделения поля Publisher с последующим использованием кнопки Add ASC и выбора поля Start_date "иажатия" кнопки Add DESC. В результате этого будет сформирован индекс по возрастанию названий издательств (поле Publisher). В пределах одного издательства даты поступления книг в библиотеку будут отсортированы по убыванию.
После задания условия формирования индекса переходим к следующему шагу при помощи кнопки Далее.
Шаг 3. Выбор области базы данных () для хранения индекса (рис. 60).
Рис. 60. Выбор области базы данных для хранения индекса
Пояснение 1. Вы можете сохранить индекс в области базы данных отличной от той, где размещена таблица данных.
Вопрос 1. В какой области базы данных следует сохранить индекс?
Ниже следует список областей базы данных, в которых хранятся компоненты базы данных. По умолчанию индекс размещается в той же области, что и таблица данных.
Пояснение 2. Формирование уникального индекса гарантирует, что в таблице не будет храниться двух записей с одинаковыми значениями полей, используемых при формировании индекса.
Вопрос 2. Вы хотите, чтобы индекс был уникальным?
Для ответа на этот вопрос предназначен флажок The index will be unique. В нашем случае это флажок должен находиться в сброшенном состоянии. Дело в том, что в один и тот же день в библиотеку могут поступить несколько книг одного издательства. По этой причине уникальность совокупности полей Publisher и Start_date не допустима.
Теперь следует "нажать" кнопку Далее для подтверждения готовности к созданию нового индекса.
Шаг 4. Подтверждение готовности к созданию нового индекса (рис. 61).
Рис. 61. Подтверждение готовности к созданию нового индекса
Пояснение 1. Вы можете включить комментарий для нового индекса.
Ниже располагается поле для ввода комментария для создаваемого индекса.
Пояснение 2. Новый индекс Publ_Start_date будет сформирован по возрастанию значений поля Publisher и убыванию значений поля Start_date. Щелкните по кнопке Готово для завершения формирования индекса.
Все действия, выполненные до сих пор в мастере Add index, были предназначены для определения параметров SQL-оператора CREATE INDEX. После щелчка мышью по кнопке Aioiai начнется выполнение этого оператора. Его результатом будет появление индекса Publ_Start_date. Данный факт выражается в появлении одноименного элемента в папке Indexes. (см. рис. 62).
Рис. 62. Обновленное содержание папки Indexes
ПРИМЕЧАНИЕ
Независимо от того, кто создал индекс, его владельцем всегда объявляется владелец таблицы, для которой он создан.
Для создания такого индекса Publ_Start_date в утилите ISQL требуется выполнить следующие SQL-операторы:
// Создание нового индекса CREATE INDEX Publ_Start_date ON Stepanov.Books ("Publisher" /* ASC */, Start_date DESC) // IN SYSTEM; // при необходимости указывается //область базы данных, где будет размещен индекс/ // Комментарий к индексу COMMENT ON INDEX Stepanov.Publ_Start_date is ' Составной индекс по полям Publisher и Start_date для ускорения выполнения запросов, использующих в качестве ключей поиска название издательства и дату поступления книг в библиотеку '
По умолчанию индексы формируются по возрастанию в той же области данных, где размешена таблица данных.
Для того, чтобы в ISQL убедиться в появлении нового индекса требуется проанализировать системное представление SYS.SYSINDEXES.
Индексы удаляются из базы данных только при явном указания об этом. В SQL Central для выполнения этого действия достаточно выделить требуемый индекс и нажать клавишу Del. В ISQL для удаления индекса необходимо выполнить оператор вида:
// Удаление индекса DROP INDEX Publ_Start_date
Для изменения состава индекса его сначала необходимо удалить, а потом создать заново с новыми свойствами.
СУБД SYBASE SQL Anywhere позволяет формировать одиночные и составные индексы с указанием индивидуального порядка использования значений выбранных полей (по возрастанию/убыванию). Это позволяет создавать сложные индексы, способные удовлетворить в большинстве случаев требования пользователей.