我知道像mysql这样的关系数据库使用hashmap或B+树进行索引。存储在B+树中的值是多少?它是为其创建索引的键的哈希值吗?还是键值本身?
我们只讨论ENGINE=InnoDB
。
索引是B树;没有哈希索引,也没有哈希字符串。(还有FULLTEXT
和SPATIAL
。(
数据在由PRIMARY KEY
排序的BTree中。我们说PK是"集群的"。
每个"辅助密钥"都在一个单独的BTree中,按密钥列排序。在叶子中是PK的副本,这样它就可以伸手去获取其余的列。
除了开销之外,INT
在索引中占用4个字节;VARCHAR
占用足够的文本空间,再加上1或2字节的长度。等等
是的,通常VARCHAR
比INT
体积更大。但这并不一定是坏事。例如,如果你有一个"自然"PK是VARCHAR
,那么可能(也可能没有(有理由创建一个INT AUTO_INCREMENT
作为PK。给我看一个例子CREATE TABLE
;我将对这些指数进行评论。