两列上的聚簇索引

dra*_*fly 14 sql-server indexing clustered-index

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

PersonJob(personId,jobId)
Run Code Online (Sandbox Code Playgroud)

with clustered index(personId,jobId).

问题是:

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

SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......
Run Code Online (Sandbox Code Playgroud)

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

谢谢帕维尔

Pao*_*lla 16

您将无法从聚簇索引中获得任何优势,您的查询仍然需要扫描PersonJob表的所有行.

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

  • 它显示了什么 - 聚簇索引搜索或聚簇索引扫描(类似于表扫描)?如果您对如何理解执行计划感兴趣,请查看以下链接:http://stackoverflow.com/questions/758912/how-to-read-a-execution-plan-in-sql-server (2认同)