Кластеризованный индекс базы данных по ссылающемуся столбцу

У меня есть две таких таблицы.

Таблица А

A_ID (первичный ключ)
A1
A2

Таблица Б

B_ID (первичный ключ)
B1
B2 A_ID (внешний ключ, но не применяется в базе данных, не уникален)

Хотя по умолчанию SQL-сервер создает кластерные индексы для B_ID, у меня есть много запросов на выборку для B, которые зависят от A_ID.

что-то вроде этого

SELECT * FROM B WHERE BA_ID = 'НЕКОТОРЫЙ ID'

Должен ли я создавать кластеризованный индекс для A_ID ТАБЛИЦЫ B?


person Biswanath    schedule 07.08.2009    source источник


Ответы (2)


Нет, обычный некластеризованный индекс подойдет. Кластерный индекс особенно удобен при выполнении запросов диапазона (МЕЖДУ). Как правило, я всегда создаю некластеризованные индексы для столбцов, используемых в ограничениях внешнего ключа.

person edosoft    schedule 07.08.2009
comment
+1 хорошая рекомендация! (индекс столбцов внешнего ключа) - это не делается автоматически, вопреки мнению многих людей - person marc_s; 07.08.2009

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

Гарантируется ли уникальность A_ID в таблице B? Не может ли более 1 записи в "B" ссылаться на один и тот же A_ID ??

Лучшая практика для кластеризованного ключа:

  • как можно меньше (узкий)
  • уникальный
  • стабильный (или статический - он никогда не должен меняться)
  • постоянно увеличивающийся

См. статью Кима Триппа Дебаты о кластеризованном индексе продолжаются или Ever- увеличение ключа кластеризации - дебаты по кластеризованному индексу - снова! для получения дополнительной информации.

Если ваш кластерный ключ не может быть гарантированно уникальным, SQL Server добавит к нему 4-байтовый унифификатор — этого следует избегать, когда это возможно (поскольку ваш кластерный ключ будет добавляться к каждой отдельной записи каждого отдельного некластеризованного ключа). index на вашей таблице, что приводит к пустой трате места, если он слишком широкий).

Марк

person marc_s    schedule 07.08.2009