Допустим, у меня есть следующая таблица в SQL Server 2008:
ProfileID int //identity; index: unique, primary key, clustered
ClientID int
RegionID int
ProfileName nvarchar(50)
Столбцы 2 и 3 связаны с соответствующими таблицами посредством внешних связей.
Допустим, мой самый распространенный запрос:this:
SELECT ProfileID, ProfileName
FROM Profiles
WHERE ClientID = ? AND RegionID = ?
ORDER BY ProfileName
Какая система индексирования лучше всего подходит?
Если я добавлю индекс покрытия (ProfileID, ProfileName), то это убьет кластерный индекс по умолчанию, поскольку индексы покрытия должны бытьнекластеризованный, но удовлетворяет, по крайней мере, возвращаемой части запроса.
Если я оставлю первичный ключ как есть, и независимо индексирую ClientID и RegionID, это дает мне 3 индекса, которые должны поддерживатьсяСУБД, ПЛЮС, сканирование таблицы все равно необходимо для возврата ProfileName, поскольку оно не охватывается.Это кажется тяжелым.
Простой пример того, насколько сложным может быть планирование индексации.