【发布时间】:2010-11-11 15:44:21
【问题描述】:
假设我在 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 维护的索引,加上表扫描仍然需要返回 ProfileName,因为它不是覆盖。这似乎很重。
一个简单的案例研究,说明索引规划的复杂程度。
【问题讨论】:
标签: sql-server database-design indexing rdbms