如果表中只有1行,當然索引的基數應爲1。它只是計算唯一值的數量。
如果您將索引視爲基於桶(如哈希)的查找表,那麼基數就是桶的數量。
以下是它的工作方式:當您在一組列(a,b,c,d)
上構建索引時,數據庫遍歷表中的所有行,查看每行的這4列的有序四元組。比方說,你的表是這樣的:
a b c d e
-- -- -- -- --
1 1 1 1 200
1 1 1 1 300
1 2 1 1 200
1 3 1 1 200
因此數據庫的外觀,在僅僅是4列(A,B,C,d):
a b c d
-- -- -- --
1 1 1 1
1 2 1 1
1 3 1 1
看到有隻有3個唯一還剩下幾行?那些將成爲我們的桶,但我們會回到那個。實際上,表格中的每一行也都有記錄標識或行標識符。所以,我們原來的表看起來像這樣:
(row id) a b c d e
-------- -- -- -- -- --
00000001 1 1 1 1 200
00000002 1 1 1 1 300
00000003 1 2 1 1 200
00000004 1 3 1 1 200
所以,當我們在看只有的4列(A,B,C,d),我們真的還看行ID:
(row id) a b c d
-------- -- -- -- --
00000001 1 1 1 1
00000002 1 1 1 1
00000003 1 2 1 1
00000004 1 3 1 1
但是我們想通過(A,b,C,d),而不是行ID做查找,所以我們生產的東西是這樣的:
(a,b,c,d) (row id)
--------- --------
1,1,1,1 00000001
1,1,1,1 00000002
1,2,1,1 00000003
1,3,1,1 00000004
最後,我們行的組中的所有行ID (a,b,c,d)值合在一起:
(a,b,c,d) (row id)
--------- ---------------------
1,1,1,1 00000001 and 00000002
1,2,1,1 00000003
1,3,1,1 00000004
看到了嗎? (1,1,1,1)(1,2,1,1)和(1,3,1,1)的值(a,b,c,d)已成爲我們查找表的關鍵到原始表格的行中。
實際上,這並沒有真正發生,但它應該給你一個關於如何實現索引的「天真」(即直接)實現的好主意。
但底線是:基數只是衡量索引中有多少個唯一行。在我們的例子中,我們查找表中的鍵數是3。
希望有幫助!
感謝您的索引信息。很好解釋。我的索引的基數應該超過1,因爲有30000行,幾乎每個成員都有不同的名字? – Tom 2009-04-16 11:24:17