MySQL数据库支撑多种索引,比方B树索引、哈希索引、全文索引等,本文偏重讲解下B树索引。(引荐:《mysql教程》)
索引道理&实质
MySQL官方诠释:索引是为MySQL进步猎取数据效力的数据构造,为了疾速查询数据。索引是满足某种特定查找算法的数据构造,而这些数据构造会以某种体式格局指向数据,从而完成高效查找数据。
B+树
MySQL平常以B+树作为其索引构造,那末B+树有什么特性呢?
树度为n的话,每一个节点指针上限为2n+1
非叶子节点不存储数据,只存储指针索引;叶子节点存储一切数据,不存储指针
在典范B+树基础上增加了递次接见指针,每一个叶子节点都有指向相邻下一个叶子节点的指针,如图所示。重要为了进步区间接见的机能,比方要找key为20到50的一切数据,只要按着递次接见线路一次性接见一切数据节点。
带递次接见的B+树简图
局部性道理和磁盘预读
那末为何数据库体系广泛运用B+树作为索引构造,而不选比方红黑树其他构造呢?
首先要先来引见下局部性道理和磁盘预读的观点。
平常来说,索引自身较大,不会悉数存储在内存中,会以索引文件的情势存储在磁盘上。所以索引查找数据过程当中就会发生磁盘IO操纵,而磁盘IO相对于内存存取异常迟缓,因而索引构造要只管削减磁盘IO的存取次数。
为了削减磁盘IO,磁盘往往会举行数据预读,会从某位置最先,预先向后读取肯定长度的数据放入内存,即局部性道理。由于磁盘递次读取的效力较高,不须要寻道时候,因而能够进步IO效力。
预读长度平常为页的整数倍,主存和磁盘以页作为单元交流数据。当须要读取的数据不在内存时,触发缺页中断,体系会向磁盘发出读取磁盘数据的要求,磁盘找到数据的肇端位置并向后一连读取一页或几页数据载入内存,然后中断返回,体系继承运转。而平常数据库体系设想时会将B+树节点的大小设置为一页,如许每一个节点的载入只须要一次IO。
以上就是MySQL索引的道理的细致内容,更多请关注ki4网别的相干文章!