Программирование >>  Реализация баз данных 

1 ... 111 112 113 [ 114 ] 115 116 117 ... 162


336 Индексы Глава It

ALTER TABLE tabled ADD coluran02 ipt

CONSTRAINT uk coljmri02

UNIQUE

Ограничение unique имеет имя и является некластерным индексом. В

отсутствие ключевого слова и кластерного индекса в таблице это ограниче-

ние создает некластерный индекс.

Администрирование индексов

При сопровождении индексов их удаление и переименование.

индекс больше не нужен или поврежден, его следует удалить. Индекс перестраивают, если необходимо задать коэффициент заполнения или реорганизовать хранилище данных индекса так, чтобы индекс не прерывался на протяжении всей БД. Переименование индекса выполняется при изменении соглашений об именовании или при несоответствии существующего индекса соглашениям об именовании.

Удаление индекса

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

DROP INDEX имя таблицы.имя индекса \ имя представлеиия.имя индекса[ ,... ] В операторе DROP INDEX указать имя таблицы или представления. Один опера-

тор DROP удалять несколько индексов. Вот, например, как удалить индекс

таблицы и представления:

DROP INDEX iableOI, indexOI. vi-. : - o

Можно удалить индекс через Object Browser в Query Analyzer или Enterprise Manager. Для этого в Object Browser щелкните правой кнопкой имя индекса, а затем щелкните Delete. Чтобы выполнить аналогичное дейсгвие в Enterprise Manager, откройте диалоювое окно Manage Indexes, выберите индекс и щелкните Delete.

Перестройка индекса

Если для таблицы или представления создан кластерный индекс, то все некластерные индексы этой таблицы используют его как ключ. При удалении кластерного индекса с помощью оператора DROP INDEX все некластерные индексы перестраиваются на применение в качестве закладки RI сто ключа индекса. Если впоследствии кластерный индекс восстановить с шью оператора CREATE DEX. то все некластерные индексы перестраиваются, при этом в закладках ключи индекса заменят RID. В больших таблицах со многим индексами для перестройки необходимо много ресурсов. К счастью, ствуют и другие способы Есть две альтернативы удалению индек-

са с его воссозданием: использование оператора DBCC DBREINDEX или DROP EXISTING в операторе CRE-TE INDEX.

Оператор DBCC DBREINDEX перестраивает один или несколько индексов таблицы

или представления, нет необходимости использования команды DROP

INDEX и CREATE INDEX. Чтобы перестроить все индексы, следует заставить DBCC

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

всех индексов таблицы ил талления. Другой способ - запустить оператор без указания имени, при этом также перестраиваются все индексы. Оператор DBCC особенно полезен для перестройки индексов, созданных ограничениями primary key и

unique, поскольку (в отличие от DROP INDEX) перед перестройкой не обязательно уда-



Выбор индекса

Теперь вы знаете, что такое индекс, как его создать и как им управлять. Кром того, в упражнении I мы на примерах как повысить частоту использования

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

Индексы создаются для поддержки различных типов запросов к БД, наиболее часто исполняемых пользователями. При этом оптимизатор запросов применяет один или несколько индексов при исполнении запроса. Индексы повышают эффективность исполнения запросов описанных далее типов.

лять ограничение. Например, следующий оператор не сможет удалить индекс, созданный ограничением primary key с именем

DROP INDEX !le01,pkJOlumn01

А оператор DBCC DBREINDEX способен перестроить индекс, созданный ограничением primary key:

DBCC DBREINDEX рк со1ишп01. 60)

В результате перестройки для индекса одноименным огра-

ничением, устанавливается коэффициент заполнения 60%. Оператор DBCC DBREINDEX

часто используется для изменения значения коэффициента заполнения индексов и, значит, для снижения частоты разделения страниц.

Конструкция DROPEXISTING оператора CREATE INDEX заменяет индекс таблицы или представления новым индексом с тем же именем. В результате индекс перестраивается. Конструкция DROP EXISTING повышает эффективность процесса перестройки (во многом подобно оператору DBCC DBREINDEX). При использовании оператора CREATE INDEX с конструкцией DROPEXISTING для замены кластерного индекса на идентичный ключ кластерного индекса некластерные индексы не перестраиваются и не упорядочивается повторно. При изменении ключа кластерного индекса некластерные индексы перестраиваются только один раз (и таблица упорядочивается заново).

Переименование индекса

Можно переименовать индекс, удалив его и создав заново. Однако проще переименовать индекс средствами системной хранимой процедуры пример де-

монстрирует, как переименовать индекс в index02:

sp renam icidfiie mame = index02, @objtype -INDEX-

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

оставить его в новом имени то имя таблицы станет частью имени индекса. На-

пример, если задать name Midc.\OJ, то вместо index02 индекс получит имя Имя таблицы не нужно указывать в параметре поскольку оно

берется из параметра name. Для входного параметра @objtype следует задать значение elNDEXj, в противном случае системная хранимая процедура не найдет верный тип объекта, который нужно переименовать.



Запросы точно соответствующие ений - в них для поиска некоторого значения используется конструкция WHERE, например:

SELECT contactname, customerid

FROM customers

WHERE customerid = oergs

Для таких запросов стоит кластерный индекс, если конструкция WHERE воз-

вращает определенное значение. Эффективность приложений для оперативно! обработки (OLTP) также повышается при использовании кластерных индексов на уникальных

В запросах точно значений, которые возвращают несколько

уникальных записей, лучше использовать некластерный индекс. Например, если

пользователи часто запрашивают в БД некоторое имя и фамилию (скажем, Bob запрос точно соответствующих вернет несколько записей БД.

Запросы со знаками подстановки - в них для поиска значений применятся конструкция LikL:

SELECT contactname, customeric , ...

FROM customers : :

WHERE customerid LIKE hl%

Запросы со знаками етановкг могут начинаться со знака процента ), Индексы не повышают эффективность исполнения подобных запросов, поскольку ключи индекса начинаются с конкретного символьного или числового значения. Запросы диапазона значений - запросы на поиск последовательности значений: SELECT contactname. customeric FROM customers WHERE

customerid BETWEEN AND -

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

Соединения таблиц - результирующие наборы таких запросов строятся на основе значений другой таблицы:

SELECT с. contactname. (i erid с. o.orderid

FROM customers с INNER JOIN orders о ON u. cubLoiDei id = 0. customerlr

Запросы с упорядоченными результатами, не использующие конструкцию ORDER BY. Примеры таких запросов мы в упражнении 1.

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

Покрыт1е запросы - их используют покрывающие индексы.

Следите, чтобы размер ключа индекса был как можно меньше, поскольку некластерные индексы используют ключи кластерного индекса качестве закладок. Как следствие, из-за широкого ключа кластерного индекса создаются большие некластерные индексы. Если вы рещили ihii..ni,4rii(niMii кластерный индекс, используйте как можно меньше столбцов для покрытия запросов. Если для покрытия запроса необходим широкий индекс, создайте покрывающий некластерный индекс.



1 ... 111 112 113 [ 114 ] 115 116 117 ... 162

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика