Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операторы языка SQL для создания и удаления индексов




В более общем случае синтаксис оператора для создания индекса выглядит следующим образом:

create [ unique ] [ clustered | nonclustered ] index <имя индекса>
on <имя таблицы> (<имя столбца 1> [ asc | desc ] [, … ])

[ with { fillfactor | max_rows_per_page } = n ]

go

 

Индекс может быть:

(i) Уникальным или неуникальным (директива unique). Уникальный индекс не допускает дублирования значений, как следствие, попытка добавить в таблицу строки, содержащие значения, уже имеющееся в столбцах индекса будет отклонена. По умолчанию (директива unique опущена), создается неуникальный индекс. Часто СУБД реализуют ограничение unique, задаваемое в { alter | create } table путем создания уникального некластерного индекса. Создание уникального индекса не будет выполнено, если столбцы содержат повторяющиеся значения и не являются not null.

(ii) Кластерным или некластерным (директивы clustered и nonclustered). Создание кластерного индекса приводит к тому, что записи таблицы физически упорядочиваются в соответствии с порядком, определенным индексом. Как следствие, у таблицы может быть только один кластерный индекс. Количество некластерных индексов зависит от СУБД, типовым значением является 249. Часто СУБД реализуют ограничение primary key, задаваемое в { alter | create } table путем создания уникального кластерного индекса.

(iii) Простым (состоит из одного столбца) или составным (включает несколько столбцов таблицы). СУБД могут ограничивать число столбцов индекса и длину записи индекса (сумма длин столбцов, образующих индекс), для MS SQL 2008 это 16 столбцов и 900 байт соответственно. Записи в индексе могут упорядочиваться по возрастанию (asc) или по убыванию (desc), порядок сортировки задается отдельно для каждого столбца таблицы.

Имя индекса должно быть уникально в рамках таблицы.

Значение n для параметра fillfactor задает % заполнения страниц индекса при его создании (0 или 100 соответствует 100%). Альтернативой является указание количества строк на странице индекса — max_rows_per_page (0 или 256 соответствует полному заполнению страниц).

Созданный индекс, как и другие объекты БД, существует, пока не будет явно удален директивой:

drop index <имя таблицы>.<имя индекса> [, … ]
go

 

Перестройку индекса в целях устранения фрагментации осуществляет директива:

alter index <имя индекса> on <имя таблицы> rebuild
go

 

Информацию о существующих индексах таблицы возвращает СХП:

sp_helpindex <имя таблицы>
go

 

С учетом изложенного можно уточнить рекомендации по выбору индексов, кластерные индексы целесообразно создавать для столбцов:

(i) являющихся первичными ключами;

(ii) по которым осуществляется сортировка;

(iii) по которым осуществляется отбор диапазонов;

(iv) по которым осуществляется соединение таблиц;

(v) которые нечасто изменяются.

Для столбцов, не включенных в кластерный индекс, создаются некластерные, при этом следует стремиться что бы:

(i) индекс «покрывал» запрос — содержал все используемые в запросе ключи поиска;

(ii) осуществлялось префиксное сканирование индекса (обход по дереву).

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




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 571; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.