Вопрос

Я собираюсь сделать индексированное представление, основанное на трех таблицах с внутренними и внешними соединениями между ними (SQL Server 2005). Я буду задавать всевозможные вопросы против этой точки зрения. Итак, мне интересно, как лучше всего выбрать, какой индекс кластер. Каковы критерии или есть какие -либо инструменты, которые мне помогут.

(Извините, если мой вопрос скучный, у меня нет большого опыта в разработке баз данных).

Заранее спасибо!

РЕДАКТИРОВАТЬ: Я должен сделать разъяснения здесь, что таблицы, которые я использую в представлении, с очень интенсивным использованием, и должны быть оплачены любые накладные расходы для обслуживания индексов.

Это было полезно?

Решение

Поскольку это индекс, вы должны выбрать столбец (или набор столбцов), который гарантированно будет не нулевым и уникальным во всех случаях. Это самый большой и самый строгий критерий - все, что мощь Будьте нулевым или дубликатом, не может быть и речи с самого начала.

В зависимости от типа запросов, которые вы будете выполнять в этом индексированном представлении, вы также можете посмотреть, есть ли у вас какие -либо столбцы (например, дата или что -то в этом роде), против которых вы будете выполнять запросы диапазона. Это может сделать интересным кандидатом на ключ кластеризации.

Но главное: ваш ключ кластеризации должно быть уникальный и не нулевой при любых обстоятельствах. И, по моему личному опыту, чтобы уменьшить размер индекса (и, таким образом, увеличить количество записей на страницу), я бы попытался использовать как можно более маленький ключ - один из них является лучшим, или комбинация двух INT - или, возможно, GUID - но не используйте поля VARCHAR (500) в ключке кластеризации!

ОБНОВИТЬ: всем тем плакату, которые продолжают говорить нам кластерные индексы, не должны быть уникальными - проверьте, что «Королева индексации», Кимберли Трипп, должна сказать по теме:

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

* Unique
* Narrow
* Static

Почему уникально?
Ключ кластеризации должен быть уникальным, потому что кластеризационный ключ (когда он существует) используется в качестве ключа поиска из всех не кластеризованных индексов. Возьмите, к примеру, индекс в задней части книги - если вам нужно найти данные, которые указывает на вход индекса - эта запись (индексная запись) должна быть уникальной, в противном случае, какая запись индекса будет той, которую вы ищете ? Итак, когда вы создаете кластерный индекс - он должен быть уникальным. Но SQL Server не требует, чтобы ваш ключ кластеризации был создан в уникальном столбце. Вы можете создать его на любых столбцах (ы), которые вам нужны. Внутренне, если ключ кластеризации не является уникальной, то SQL Server «будет« уникальным »его, добавив в данные 4-байтовое целое число. Таким образом, если кластерный индекс создан на чем -то, что не является уникальным, то при создании индекса есть дополнительные накладные расходы, но и потраченные на дисковое пространство, дополнительные затраты на вставки и обновления, а в SQL Server 2000 есть дополнительная стоимость по кластерному индексу Восстановление (которая из -за плохого выбора для кластеризационного ключа сейчас более вероятна).

Источник: http://www.sqlskills.com/blogs/kimberly/post/ever-increasing-clustering-key-theclustered-index-debateaagain!.aspx

Другие советы

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

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

Кластерный индекс не должен быть уникальным. Столбцы в нем могут быть даже нулевы. Например, это будет работать без ошибки:

create table  #test (col1 int identity, col2 int)
create clustered index ix_test on #test (col2)
insert into #test (col2) values (1)
insert into #test (col2) values (1) -- Duplicate in clustered index
insert into #test (col2) values (null)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top