2012-03-06 39 views
0

我有一个包含多于40k行的表和一个包含此表上的2列的主键。主键(> 1列)上的索引(1列)是否有用? (SQL)

这些主键列之一上的独立非聚簇(非唯一!)索引是否可以加快对该列的查询(不使用其他PK列)?或者SQL Server会以同样有效的方式使用主键来访问只有一列主键?

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

+0

您是在PK索引的第一个还是第二个查询的列? – beny23 2012-03-06 13:35:24

+0

可以是任一列 – cdbeelala89 2012-03-06 13:38:19

回答

0

假设的PK是:字段1,字段2(按该顺序)

  • 查询,关于字段1过滤器,可以从该PK索引中获益(索引查找)。
  • 对Field1和Field2进行筛选的查询可以从PK索引(索引查找)中受益。
  • 对Field2进行筛选的查询无法从PK索引(索引扫描)中受益。

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

推荐阅读一下这篇文章,值得加快。

相关问题