如何组织多列b-tree索引

我想了解更好的索引组织。 想象一下,我们有一个包含2列的表:
CREATE TABLE user( 
  name varchar(100)
 ,age int)
我们想创建一个索引:
CREATE INDEX IDX_MultiColIdx on user(name,age)
B-Tree索引组织将如何? 在一列(例如年龄)的情况下,组织是明确的:每个非叶节点将包含一组将用于搜索的整数键。哪些值包含IDX_MultiColIdx B-Tree索引的节点?     
已邀请:
  哪些值包含IDX_MultiColIdx B-Tree索引的节点? 值of2ѭ,
age
和行指针(
RID
/
ROWID
或聚簇键,具体取决于表组织)按字典顺序排序。 它们的存储方式取决于数据类型和数据库系统。 通常情况下,
CHAR
用右边的空间填充,直到它的大小,而
VARCHAR
的前缀是它的长度。
MyISAM
和其他一些引擎可以使用键压缩:一组键的匹配部分只存储一次,其他键只存储不同的部分,如下所示:
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
个字符”     
我假设您在询问内部数据库实现,因为您提到了“非叶子节点”。 b树中的内部节点不需要存储完整的密钥;他们只需要存储分隔符键。前缀和后缀压缩意味着内部节点可以非常密集,因此降低了b树的高度,从而提高了整体性能。 例如,给定具有顺序键<'非常长的字符串'的索引,314159>和<'不是相同的字符串',9348>,所有内部节点需要表示的是那些键之间的分隔,可以用单个字符表示。以类似的方式,当要在内部节点中分离的密钥具有共同前缀时,该前缀仅需要存储一次并且它们发散的点表示。 叶节点需要存储完整的键值,并且可以存储在链接列表中以进行键顺序遍历。可以通过使用前缀压缩或其他技术来压缩叶节点页面以进一步降低树高度。 有关此问题的详细参考,请参阅Gray& Sons的“Transaction Processing:Concepts and Techniques”。如果您想了解更多详细信息,请查看Reuter。     

要回复问题请先登录注册