我想了解更好的索引组织。 假设我们有一个包含 2 列的表:
CREATE TABLE user(
name varchar(100)
,age int)
我们想创建一个索引:
CREATE INDEX IDX_MultiColIdx on user(name,age)
B-Tree 索引组织会是什么样子?
在一列的情况下,比如说,age,组织很清楚:每个非叶节点都将包含一组用于搜索的整数键。哪些值包含我们的 IDX_MultiColIdx B 树索引的节点?
最佳答案
Which values contains nodes of our IDX_MultiColIdx B-Tree index?
name
、age
和行指针(RID
/ROWID
或聚集键的值,具体取决于表组织),按字典顺序排序。
它们将如何存储取决于数据类型和数据库系统。
通常,CHAR
以其大小的空格右填充存储,而 VARCHAR
以其长度为前缀。
MyISAM
和其他一些引擎可以使用 key 压缩:一组 key 的匹配部分只存储一次,其他 key 只存储不同的部分,像这样:
Hamblin
Hamblin, California
Hamblin (surname)
Hambling Baronets
Hambly
Hambly Arena
Hambly Arena Fire
Hambo
Hambo Lama Itigelov
Hambok
Hambone
将被存储为:
Hamblin
[7], California
[7] (surname)
[7]g Baronets
Hambly
[6] Arena
[6] Arena Fire
Hambo
[5] Lama Itigelov
[5]k
[5]ne
,其中 [x]
表示“从前一个键中获取前导 x
个字符”
关于database - 多列 b-tree 索引是如何组织的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3715350/