2013-08-06 4 views
1

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

+1

Пожалуйста, укажите информацию о РСУБД, о которой вы говорите. –

ответ

4

Предполагая, что вы говорите о SQL Server, тогда просто не указывайте UNIQUE при создании индекса.

CREATE /*UNIQUE*/ NONCLUSTERED INDEX IX ON T(C) 

Как UNIQUE закомментирован выше этого не обеспечивает уникальность на C колонки. Но на самом деле it will still be made unique behind the scenes, добавив (уникальный) указатель строки в некластеризованный индексный ключ.

Что касается структуры данных, то кластерные и некрупные индексы - это B+ trees.

+0

Какая структура данных используется для хранения такого индекса? –

+0

@ java_geek - B деревьев. См. Также [Структуры некластеризованных индексов] (http://technet.microsoft.com/en-gb/library/ms177484 (v = sql.105) .aspx) –

1

Как указано Мартином Смитом, индексы не обязательно должны быть логически, но на практике SQL Server добавляет 4-байтовый столбец «uniquifier», чтобы гарантировать физическую уникальность.

С точки зрения структурных различий, некластеризованные индексы включают указатели на кластеризованный индекс или указатель кучи (если вы не создали кластерный индекс).

Следует отметить, что в то время как они оба B-дерева, есть и другие отличия - некластерных индексы имеют свои листовые узлы 1 уровень выше, что может означать, чтение из некластеризованных индексов могут быть быстрее, чем чтение с кластерный индекс, обеспечивающий требуемые данные, доступен в листовых узлах (требуемые столбцы находятся в ключе индекса).

Вот кластерный индекс структура из Books Online:

Clustered index structure

http://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx

Вот некластерные структуры индекса:

Non-clustered index structure

http://technet.microsoft.com/en-gb/library/ms177484(v=sql.105).aspx

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

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

Смежные вопросы