【发布时间】:2011-07-22 17:53:49
【问题描述】:
我有一个多对多表,比如说:
PersonJob(personId,jobId)
使用聚集索引 (personId,jobId)。
问题是:
如果在 SQL 中的某个地方,我会进行如下查询:
SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......
它会利用聚集索引在 PersonJob 表中查找具有特定 jobId 的记录吗?或者我会更好地在 PersonJob 表的 jobId 列上创建新的非聚集非唯一索引?
谢谢 帕维尔
【问题讨论】:
-
聚簇索引的叶页实际上包含行数据——对于具有聚簇索引的表,数据行存储在其中。因此,除非有一个包含查询的所有相关列的非聚集索引(称为覆盖索引),否则每个查询都必须在某个时间点访问聚集索引。
-
如果您想了解有关索引的更多信息:请查看我的SQL Indexing tutorial (also for SQL Server)。 multi-column indexes 上的页面解释了为什么您的查询无法有效利用您拥有的(聚集)索引。
标签: sql-server indexing clustered-index