2012-03-06 67 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列的領域。

推薦閱讀一下這篇文章,值得加快。