SQL Server: несколько индексов для одинаковой производительности столбцов - PullRequest
0 голосов
/ 04 августа 2011

У меня есть таблица Person с колонками personId, teamId, departmentId, среди прочего.Большая часть запроса использует комбинацию этих столбцов в поле where.

Пример

Select * from .. where personId = 2 and departementId = 1
Select * from .. where personId = 2 and teamId = 1   
Select * from .. where departmentId = 2 and teamId = 1   

Мой вопрос заключается в том, должен ли я создавать индекс для каждого из этих столбцов по отдельности?

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

По одному на столбец: SQL Server будет использовать пересечение индексов

Или попробуйте что-то вроде этого: три составных индекса.Первый столбец каждого также полезен как «индекс одного столбца».

  • departmentId, teamId, personId
  • personId, departmentId, teamId
  • teamId, personId, departmentId

Примечания:

  • ГДЕ порядок предложений не имеет значения
  • SELECT * плохо

Кроме того, это хорошая идея дляиндексировать столбцы внешнего ключа, и любая стратегия будет работать

2 голосов
/ 04 августа 2011

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

Только немного дольшеответ заключается в том, что вы должны проверить ваш запрос по репрезентативным данным - Советник по настройке ядра СУБД SQL Server может предложить вам индексы, но только вы можете проверить, чтобыУбедитесь, что эти индексы подходят для всех других запросов (включая вставки / обновления) - вам необходимо сбалансировать производительность операций чтения со стоимостью обслуживания этих индексов при записи в базу данных (а также с любыми ограничениями хранения / пространства).

0 голосов
/ 04 августа 2011

Я бы, как правило, не создавал 3 индекса для вариантов использования поля, но это всего лишь общее правило.

Что касается ответа «как мне сделать это как новичка», я бы создал рабочую нагрузку и использовал советник по настройке.Это не конечное решение, и когда кто-то узнает больше, он выходит за пределы волшебника, но это хорошее место для начала.Убедитесь, что у вас есть достойная репрезентативная выборка, поскольку индексы могут снизить производительность других запросов, если они выполнены неправильно.

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