Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sro_1_subd.docx
Скачиваний:
12
Добавлен:
10.03.2016
Размер:
196.82 Кб
Скачать

Структура индексного файла

В индексных файлах располагается одна запись заголовка и одна или больше записей вершин. В записи заголовка находится информация о корневой вершине, текущем размере файла, длине ключа, особенностях индекса и сигнатура, а также представление ключа* в коде ASCII, которое можно вывести на печать, и выражения FOR. Запись заголовка начинается с нулевой позиции файла.

Во всех других записях вершин содержится атрибут, количество существующих ключей и указатели на вершины, располагающиеся слева и справа (на том же уровне) от данной вершины. Помимо этого, в них находится группа символов, представляющая значение ключа, и либо указатель на вершину нижнего уровня, либо подлинный номер записи в базе данных. Размер каждой записи, которая выведена в файл, равен 512 байтам.

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

MS SQL Server 2012 поддерживает три типа индексов:

  • кластерный — Clastered Index;

  • некластерный — Noclastered Index;

  • уникальный — Unique Index.

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

Некластерный индекс — это самостоятельный объект базы данных. Он хранится отдельно от данных. Для одной таблицы может быть определено несколько некластерных индексов. Каждый из них создается для одного или нескольких столбцов.

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

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

Любой индекс создается следующей командой:

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]  INDEX_name ON table(column [ASC| DESC] [,...n])  [WITH  [PAD_INDEX]  [[,] FILLFACTOR = fillfactor]  [[,] IGNORE_DUP_KEY]  [[,] DROP_EXISTING]  [[,] STATISTICS_NORECOMPUTE]]  [ON filegroup]  [SORT_IN_TEMPDB]

Здесь:

  • [UNIQUE] [CLUSTERED | NONCLUSTERED] — тип индекса: уникальный, кластерный или некластерный.

  • INDEX_name — имя индекса (идентификатор в языке Transact SQL).

  • table(column [ASC | DESC] [,... n]) — имена таблицы и столбцов с указанием вида упорядочения:

    • ACS — упорядочение по возрастанию;

    • DESC — упорядочение по убыванию.

  • PAD_INDEX — параметр, указывающий на необходимость резервирования для каждой страницы индекса свободного пространства для вставки новых записей. Этот параметр следует использовать только совместно с параметром FILLFACTOR.

  • FILLFACTOR = fillfactor — этот аргумент определяет степень заполнения индексных станиц при первоначальном создании индекса. SQL Server 2000 не поддерживает автоматически фактор заполнения на определенном уровне. То есть с помощью параметра FILLFACTOR можно контролировать степень заполнения страниц только на момент создания индекса. При дальнейшей работе с базой данных степень заполнения индекса будет меняться, и может наступить момент, когда все страницы будут заполнены плотно. Но на этот случай всегда существует возможность выполнения операции перестройки индекса.

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

  • DROP_EXISTING — параметр указывает на необходимость уничтожения ранее созданного индекса с этим же именем и построения нового. Можно сначала удалить индекс, а потом его строить, но указание параметра DROP_EXISTING предпочтительнее, потому что в этом случае сервер выбирает оптимальный режим перестройки индекса с учетом ранее существовавшего. Особенно важно использовать данный параметр при перестройке кластерного индекса таблицы, для которой существует много некластерных индексов. При указании данного параметра не происходит промежуточного перестроения всех некластерных индексов.

  • STATISTICS_NORECOMPUTE — при указании данного параметра запрещается автоматическое перестроение статистики для создаваемого индекса. В этом случае статистика создается один раз при первоначальном построении индекса. Отмена режима автоматической перестройки статистики может существенно ускорить обработку запросов с использованием данного индекса. При длительном использовании базы данных статистику можно перестраивать вручную по мере необходимости.

  • ON filegroup — параметр, который определяет, в какой группе файлов физически будет создаваться индекс. При использовании данного параметра для создания кластерного индекса в эту группу файлов будут перенесены страницы с данными, так как кластерный индекс использует физическое упорядочение записей исходного файла.

  • SORT_IN_TEMPDB — при использовании данного параметра при построении индекса используются временные объекты в системной базы данных Tempdb. Если эта системная база данных расположена на отдельном носителе или даже если она полностью расположена в оперативной памяти, то построение индекса займет существенно меньше времени.

MS SQL Server 2000 позволяет создавать индексы с использованием графического интерфейса в Enterprise Manager. Индексы, как и триггеры, принадлежат в скрытым объектам MS SQL Server 2000. В перечне объектов базы данных они отсутствуют. Действительно, так как индексы строятся к таблицам данных или к представлениям, то интерфейс управления индексами находится в контекстном меню конкретной таблицы, в разделе Все задачи, и называется Manage Indexes(рис. 4).

Рис. 4. Интерфейс управления индексами

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

Рис. 5. Примеры индексов для таблицы Exemplar

Характеристики индексов, созданных по умолчанию, можно посмотреть и при необходимости отредактировать, нажав кнопку Edit (рис. 6).

Вывод

Изучив данную тему , мы пришли к выводу , что большинство функции в СУБД , такие как автоматическая сортировка, повышение скорости поиска реализуются за счет индексации. Также были рассмотрены практические случаи индексных файлов. Было представлено сбалансированное дерево. Дерево состоящее из иерархии узлов (node), в которой каждый узел, за исключением корня (root), имеет родительский (parent) узел, а также один, несколько или ни одного дочернего (child) узла. Также было представлена структура индексных файлов. А также были рассмотрены типы индексов на языке MS SQL , и были представлены на примере .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]