2011-12-16 32 views
1

可以說一列只會用於加入。 (即,我不會在列上排序,也不會在列中單獨搜索特定值)......我將使用列的唯一方法是加入到另一個表中。當列僅用於(散列)加入時,索引是否有任何好處?

如果數據庫支持哈希聯接(根據我的理解,它不會受益於索引)..那麼索引的添加是不是完全多餘的? (和浪費)?

+2

你怎麼知道數據庫將(總是)使用散列連接來連接這個表? – tbone 2011-12-16 17:25:59

+0

給出正確的統計數據......我假設基於成本的優化器足夠聰明,可以通過更昂貴的嵌套循環(無索引)選擇散列連接。 – vicsz 2011-12-16 17:28:10

回答

2

在SQL Server中,它仍然會阻止Key Lookup

如果您在無索引字段中使用JOIN,則服務器需要從聚集索引中獲取該字段的值。

如果你在一個NC索引上的JOIN,這些值可以直接獲得而不需要從集羣中加載所有的數據頁面(這實際上是整個表格)。

因此,基本上你可以節省大量的IO,因爲第一步基於非常窄的索引而不是從磁盤加載的整個表上過濾掉。