我有一个多对多的表,让我们说:
PersonJob(personId,jobId)
with clustered index(personId,jobId)。
问题是:
如果在SQL的某个地方,我会进行如下查询:
SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......
它会利用该聚簇索引在PersonJob表中查找具有特定jobId的记录吗?或者我会更好地在PersonJob表中的jobId列上创建新的非群集非唯一索引?
由于 的Pawel
答案 0 :(得分:15)
聚集索引没有任何优势,您的查询仍然需要扫描PersonJob表的所有行。
如果您的聚簇索引(jobID,personId)中的列被反转,那么您将利用索引。 请考虑聚簇索引按表中索引的列的值对表中的实际行进行排序。因此,对于(personId,jobID)上的聚簇索引,您将具有相同personId的所有行“分组”在一起(按jobID的顺序),但具有相同jobID的行仍分散在表中。