主键(> 1列)上的索引(1列)是否有用? (SQL)

时间:2012-03-06 13:20:16

标签: sql indexing key

我有一个包含超过40k行的表,并且该表上包含一个由2列组成的主键。

其中一个主键列上的单独非聚簇(非唯一!)索引是否可以加快对此列的查询(不使用其他PK列)?或者,SQL Server是否会以同样有效的方式使用主键来仅访问主键的一列?

我知道主键是一个唯一的索引,但这与问题无关,我只关心跨越多个列的主键,而不是仅仅从一个PK列访问数据时的主键。

1 个答案:

答案 0 :(得分:0)

假设PK已打开:Field1,Field2(按此顺序)

  • 对Field1进行过滤的查询可以从该PK索引(索引搜索)中受益。
  • 对Field1和Field2进行过滤的查询可以从该PK索引(索引搜索)中受益。
  • 对Field2进行过滤的查询无法从该PK索引(索引扫描)中受益。

因此,在最后一种情况下,您可以考虑在Field2上使用单独的索引。请注意,如果有更多信息,例如您将返回除PK字段以外的表中的其他字段。在这种情况下,如果您的PK是CLUSTERED(默认情况下,PK是),那么数据已经在索引中。但是在NONCLUSTERED索引中(例如,如果您在Field2上创建了一个索引),则必须关闭并执行查找以获取为查询返回的其他字段。那么你可以进入决定是否在NONCLUSTERED索引中包含列的领域。

建议稍微阅读一下,值得加快速度。

相关问题