Допустим, у меня есть следующие таблицы в SQL Server 2008:Когда использовать индекс покрытия, составной индекс, и уникальные столбчатых индексы
ProfileID int //identity; index: unique, primary key, clustered
ClientID int
RegionID int
ProfileName nvarchar(50)
Колонка 2 и 3 ссылку на соответствующие таблицы с помощью внешних связей.
Скажем, мой самый распространенный запрос заключается в следующем:
SELECT ProfileID, ProfileName
FROM Profiles
WHERE ClientID = ? AND RegionID = ?
ORDER BY ProfileName
Что индексирование система лучше всего подходит?
Если я поместил индекс покрытия (ProfileID, ProfileName), то он убил кластерный индекс по умолчанию, поскольку индексы покрытия должны быть некластеризованными, но удовлетворяет хотя бы части возврата запроса.
Если я оставляю первичный ключ как есть и независимо индексирую идентификатор ClientID и RegionID, который дает мне 3 индекса, которые должны поддерживаться RDBMS, PLUS, сканирование таблицы по-прежнему необходимо для возврата имени ProfileName, t покрыт. Это кажется тяжелым.
Простой случай-исследование того, как может быть сложное планирование индексирования.
@Quassnoi мой друг, вы вернулись. Я предполагаю, что вы имеете в виду «... и оставить основной индекс тоже»? Не только этот индекс? – IamIC
@IanC: да, конечно. – Quassnoi
Quassnoi У меня есть два вопроса: 1) Я бы подумал (ClientID, RegionID ...) было бы лучше, так как ClientID является самым уникальным столбцом (хорошо, я не упоминал об этом в моем вопросе, предоставленном). Я считаю, что заказ является самым уникальным для наименее уникального. Второй вопрос: почему имя ProfileName в индексе, но не как включенный столбец, когда мы не запрашиваем его конкретно? – IamIC