кластерный индекс в столбце «соединение» или в столбце «где» - PullRequest
1 голос
/ 23 сентября 2011

У меня есть две таблицы в SQL Server.
Таблица A имеет два столбца: ID и Имя. Они оба уникальны.
Таблица B присоединяется к таблице A в столбце Имя.

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

Select A.Name, B.xyz From A Inner Join B on A.Name = B.Name Where ID = 1  

В каком столбце таблицы A я хочу создать кластерный индекс? ID для ускорения WHERE или Имя для ускорения JOIN?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Я не думаю, что вам нужен кластерный индекс вообще. Вы хотите просто обычный индекс. (Если вы не собираетесь читать все данные в последовательном порядке.)

Вам нужен индекс для обоих полей вместе, с ID first и Name second.

Итак, три индекса:

ID Primary
Name Unique
ID, Name Unique

Единственная причина для создания последнего индекса - если ваша база данных поддерживает слияние индексов. В противном случае вы хотите просто индекс на ID. A.Name не используется из индекса, A.Name - это данные, а не ключ поиска. Вы хотите индекс на B.Name.

0 голосов
/ 23 сентября 2011

Столбец NAME , поскольку он уникален, и вы с большей вероятностью сможете выполнять поиск / объединение на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...