作者:海之蓝水之清清2011 | 来源:互联网 | 2013-08-07 09:26
.MYI文件头的主要存放了四部分信息:state(主要是整个索引文件的基本信息)、base(各个索引的相关信息,主要是索引的限制信息)、keydef(每个索引的定义信息)、recinfo(每个索引记录的相关信息)。
MyISAM存储引擎的所有存放在.MYI文件中,每个.MYI文件由文件头和实际的索引数据。
.MYI文件头的主要存放了四部分信息:state(主要是整个索引文件的基本信息)、base(各个索引的相关信息,主要是索引的限制信息)、keydef(每个索引的定义信息)、recinfo(每个索引记录的相关信息)。
在文件头后面的是实际的索引数据信息了。
索引数据以Block(Page)为最小单位,每个block中只会存在同一个索引的数据,这主要是基于提高索引的连续读性能的目的。
在mysql中,索引文件中索引数据的block被称为index block,每个Index block的大小并不一定相等。
在.MYI中,Index Block的组织形式实际上只是一种逻辑上的,并不是物理意义上的。
在物理意义上实际上是通过File Block的形式存放在磁盘上面的。
在key cache中缓存的索引信息是以cache block的形式组织存放的。
cache block是相同大小的,和.MYI文件物理存储的Block(File Block)一样。
在一条Query通过索引检索表数据的时候,首先会检查索引缓存(key_buffer_cache)中是否已经存在需要的索引信息。
如果没有,则会读取.MYI文件,将相应的索引数据读入key cache中的内存空间中,同样以Block形式存放,成为cache block。
不过数据的读入,并不是以Index Block的形式来读入,而是以File Block的形式来读入的。
以File Block形式读入Key Cache之后,Cache Block实际上与File Block完全一样。
当我们从.MYI文件中读入File Block到Key Cache中的Cache Block的时候,如果整个Key Cache中已经没有空闲的Key Cache可以使用的话,将会通过Mysql实现的LRU相关算法,将某些Cache Block清除出去。