两列上的聚簇索引

时间:2011-03-25 08:10:03

标签: sql-server indexing clustered-index

我有一个多对多的表,让我们说:

PersonJob(personId,jobId)

with clustered index(personId,jobId)。

问题是:

如果在SQL的某个地方,我会进行如下查询:

SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......

它会利用该聚簇索引在PersonJob表中查找具有特定jobId的记录吗?或者我会更好地在PersonJob表中的jobId列上创建新的非群集非唯一索引?

由于 的Pawel

1 个答案:

答案 0 :(得分:15)

聚集索引没有任何优势,您的查询仍然需要扫描PersonJob表的所有行。

如果您的聚簇索引(jobID,personId)中的列被反转,那么您将利用索引。 请考虑聚簇索引按表中索引的列的值对表中的实际行进行排序。因此,对于(personId,jobID)上的聚簇索引,您将具有相同personId的所有行“分组”在一起(按jobID的顺序),但具有相同jobID的行仍分散在表中。