据我所知,关系数据库就像mysql一样使用hashmap或B +树进行索引。存储在B +树中的值是多少?是为其创建索引的键的哈希值?或关键值本身?
答案 0 :(得分:1)
让我们只谈ENGINE=InnoDB
。
指数是BTrees;没有散列索引,也没有散列字符串。 (还有FULLTEXT
和SPATIAL
。)
数据是由PRIMARY KEY
订购的BTree。我们说PK是"聚集"。
每个"二级密钥"在一个单独的BTree中,由关键列排序。在叶子中是PK的副本,因此它可以到达以获得其余的列。
除了开销之外,INT
在索引中占用4个字节; a VARCHAR
为文本占用足够的空间,加上1或2个字节的长度。等
是的,通常VARCHAR
比INT
更笨重。但这并不一定是坏事。例如,如果你有一个"自然" PK为VARCHAR
,可能(或可能不)是创建INT AUTO_INCREMENT
作为PK的理由。给我举个例子CREATE TABLE
;我会批评指数。