2012-07-02 3 views
1

В статье Выбор индексных ключей в SQLServerpedia я нашел следующие строки:Сортировка столбцов в выборе индекса

Поскольку данные в таблице упорядочены в соответствии со структурой кластерного индекса, индекс построен на last_name, first_name не будет вести себя так же, как тот, который был создан для first_name, last_name. Сначала следует указать наиболее избирательные столбцы.

Почему? Почему индекс на a, b отличается от индекса на b, a? Единственность комбинации остается одинаковой в любом случае, поэтому почему следует указывать тот, который встречается менее первым?

+2

Объяснение можно найти здесь [http://sqlserverpedia.com/wiki/Index_Selectivity_and_Column_Order). –

+0

Отличная ссылка. Благодаря! – SexyBeast

ответ

4

Уникальность такая же, но в статье упоминается поведение. Подумайте о телефонной книге. Если вы ищете Джона Смита, гораздо легче найти фамилию = Смит сначала, а затем сузить до первого имени = Джон. Попытайтесь сделать это по-другому ... найдите всех Джонсов, затем выясните, какие из них - Смиты?

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

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

Я также не думаю, что ваш индекс должен быть уникальным в этом конкретном случае, так как маловероятно, что у вас будет возможность предотвратить двух подписчиков Джона Смита от подписки на ваш бюллетень или работу в вашей компании, или присоединение к вашему бойцовскому клубу - последний/первый не является хорошим ключом.

+0

Спасибо. Это было полезно. – SexyBeast

+1

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