一、定义算法
索引是一种数据结果,帮助提升获取数据的速度数据库
为了提升查找速度,有不少查询优化算法。可是每种查找算法都只能应用于特定数据结构之上。数据结构
索引就是数据库建立的知足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据优化
二、目前大部分数据库系统及文件系统都采用B Tree或其变种B+Tree做为索引结构索引
三、为何使用B Tree(B+Tree)内存
红黑树也可用来实现索引,可是文件系统及数据库系统广泛采用B/+Tree,何也?get
通常来讲,索引自己也很大,不可能全存内存,每每以索引文件的形式存在磁盘搜索
索引查找过程当中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,因此评价一个数据结构做为索引的优劣最重要的指标就是在查找过程当中磁盘I/O操做次数的渐进复杂度。引用
换句话说,索引的结构组织要尽可能减小查找过程当中磁盘I/O的存取次数developer
四、MyISAM索引实现
MyISAM引擎使用B+Tree做为索引结构,叶节点data域存放数据记录的地址
MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,则取出其data域的值,而后以data域的值为地址,读取相应数据记录。
MyISAM的索引方式也叫作“非汇集”的,之因此这么称呼是为了与InnoDB的汇集索引区分
五、InnoDB索引实现
InnoDB的数据文件自己就是索引文件
表数据文件自己就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,所以InnoDB表数据文件自己就是主索引
叶节点包含了完整的数据记录。这种索引叫作汇集索引。