索引
是对数据库中一列或多列的值进行排序的一种结构
索引的种类:
普通索引
唯一索引
全文索引 - 替代 Like 模糊查询
B-Tree 索引 - MyISAM,InnoDB
Hash 索引 - Memory 存储引擎
B-Tree 索引
概述
Mysql 数据库中使用最频繁的索引类型, 基本所有存储引擎都支持 BTree 索引正是其优异的检索表现, 才使其有这样的地位
存储结构
是使用 B-Tree 的数据结构来存储数据, 但是不同的存储引擎在使用这种数据结构来存储数据时会进行不同的修改, 例如 MyISAM 和 InnoDB 使用的都是 B+Tree 结构但是与 B-Tree 不同的是, 它把所有的数据都存到了叶子节点上并且所有的叶子节点相互连通, 加快相邻数据节点的检索并且存储策略也进行了修改
MyISAM 非聚集索引
MyISAM 的存储策略是, 所有的叶子节点存储的并不是真实的数据, 而是数据节点的地址通过地址检索真正的数据, 索引文件与数据文件分离存储这样的存储策略称为非聚集索引需要注意的是它的主索引与辅助索引的简直不能重复
它的检索策略是检索 B-Tree 找到对应的数据节点, 拿到数据的物理地址, 然后去访问
非聚集索引
InnoDB 聚集索引
InnoDB 的存储策略是叶子节点即数据节点, 索引文件与数据文件一起存储它的主索引存储的是完整的数据记录集合也可以看成索引的索引, 而辅助索引存储的是真实的数据, 这个数据是数据表中的主键 InnoDB 的数据文件本身就是主键索引文件, 这样的索引被称为聚集索引且一个表只能有一个聚集索引
检索的时候它通过主键来确定数据这样的数据文件本身就是主键索引的存储结构所以称它为聚集索引
聚集索引
来源: http://www.jianshu.com/p/d82a9755aa76