参考 http://blog.itpub.net/703656/viewspace-1018470/
创建表结构
create table test(name char(20), age int, class int);
create index idx_name on test(name);
create index idx_age_class on test(age, class);
insert into test values('张三', 15, 1);
insert into test values('李四', 20, 2);
insert into test values('王五', 30, 3);
.MYI文件包括两部分
一 头信息
二 KEY信息
头信息包括
header_lenght 头长度
keys 索引个数
records 没有被delete的记录个数
del 被删除记录个数
dellink 下一个黑洞
key_file_length .MYI文件大小
data_file_length .MYD文件大小
key_root 这是个数组,值为索引本身所在的block在文件中的offset,每一个block时会放许多的key
key信息
=============针对索引idx_name==============
keydef->keysegs 1 单独索引
keydef->block_length 1024
keydef->key_length sizeof(name)+sizeof(rowid)
keyseg->type 文本
keyset->start 索引idx_name在insert记录中的offset
===========针对联合索引idx_age_class===========
keydef->keysegs 2 联合索引(age, class)
keydef->block_length 1024字节
keydef->key_length sizeof(age)+sizeof(class)+sizeof(rowid)
//针对age
keyseg->type 数字
keyseg->start age字段在insert记录中的offset
//针对class
keyseg->type 数字
keyseg->start class字段在insert记录中的offset
对于idx_age_class所在的block
第一个关键字 value 15,1
第二个关键字 value 20,2
第三个关键字 value 30,3
第一个关键字 pointer 001 行指针
第二个关键字 pointer 003 行指针
第三个关键字 pointer 005 行指针