database - 多列 b-tree 索引是如何组织的

标签 database indexing b-tree

我想了解更好的索引组织。 假设我们有一个包含 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?

nameage 和行指针(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/

相关文章:

database - 有没有比pg_trgm更快的postgres模糊匹配?

SQL Server 到 mySQL 转换器

sql - 使用 Rails/Postgresql 索引多列索引

c++ - 原始二叉树数据库或 MongoDb/MySQL/等?

sql - 非聚集索引在 SQL Server 中的工作原理

database - DynamoDB 高效地更新整个列

database - 如何在 bolt 中获取桶中的键数

python - 在python中处理list.index(可能不存在)的最佳方法?

search - 使用 robots.txt 文件从 Google 列表中删除页面

algorithm - B+树中的最大和最小元素