什么值将存储在DB索引中?

时间:2017-09-01 05:34:34

标签: mysql indexing

据我所知,关系数据库就像mysql一样使用hashmap或B +树进行索引。存储在B +树中的值是多少?是为其创建索引的键的哈希值?或关键值本身?

1 个答案:

答案 0 :(得分:1)

让我们只谈ENGINE=InnoDB

指数是BTrees;没有散​​列索引,也没有散列字符串。 (还有FULLTEXTSPATIAL。)

数据是由PRIMARY KEY订购的BTree。我们说PK是"聚集"。

每个"二级密钥"在一个单独的BTree中,由关键列排序。在叶子中是PK的副本,因此它可以到达以获得其余的列。

除了开销之外,INT在索引中占用4个字节; a VARCHAR为文本占用足够的空间,加上1或2个字节的长度。等

是的,通常VARCHARINT更笨重。但这并不一定是坏事。例如,如果你有一个"自然" PK为VARCHAR,可能(或可能不)是创建INT AUTO_INCREMENT作为PK的理由。给我举个例子CREATE TABLE;我会批评指数。