如果表中只有一行数据,那么索引的基数应该是1。基数指的是唯一值的数量,可以将索引看作是一个基于桶(如哈希)的查找表,而基数就是桶的数量。
具体来说,当你在一组列(a、b、c、d)上建立索引时,数据库会扫描表中的所有行,针对每一行查找这四个列的有序四元组。比如说,如果你的表长这样:
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
数据库查询的只有这四列(a,b,c,d):
a b c d
1 1 1 1
1 2 1 1
1 3 1 1
注意到现在只剩下三个唯一的行了吗?这些将成为我们的桶,但我们会回到这点。实际上,在表中每一行都有一个记录ID或行标识符。因此,我们的原始表看起来像这样:
(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
所以,当我们仅查看 (a,b,c,d) 的 4 列时,实际上也在查看行 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
最后,我们将所有具有相同(a,b,c,d)值的行的行ID分组在一起:
(a,b,c,d) (row id)
1,1,1,1 00000001 and 00000002
1,2,1,1 00000003
1,3,1,1 00000004
看到了吗?(a,b,c,d)的值为(1,1,1,1)、(1,2,1,1)和(1,3,1,1),它们成为我们查找表中原始表行的键。
实际上,这些都没有真正发生,但它应该能够给你一个关于如何进行“天真”(即直接)实现索引的好主意。
但归根结底,基数只是衡量索引中有多少个唯一行。在我们的示例中,这是查找表中键的数量,即3个。
希望这可以帮助你!