InnoDB
特点:
- 行级锁
- 支持事务处理
- 支持外键,
- 使用B+树。
- 聚集索引主键
- mysql5.6版本开始支持已全文索引
InnoDB中数据文件本身就是索引文件。索引也使用B+树实现,叶子节点储存数据。索引文件本身需要按主键构建(所以InnoDB需要必须有主键,没有指定会默认生成)。InnoDB的辅助索引底层储存的是主键的值。然后再根据主键的值去主键索引(也相当于数据文件)去查找相应的值。
InnoDB这样的聚集式索引会使得主键的检索十分高效。若使用辅助索引,需查询2遍索引。
最好不要使用过长的主键,因为辅助索引会引用主键值。主键最好是自增的,防止为维护B+树而频繁分裂调整树结构。
MyISAM
- 不支持事务
- 不支持外键
- 不支持行锁
MyISAM的索引使用B+树实现,叶子节点记录数据的储存地址。主索引和辅助索引结构相同,区别在于主索引是唯一的,而辅助索引可以重复。查询过程为:先查询B+树查询索引,得到数据地址,再根据地址读取数据。这种索引方式称为非聚集索引。
MyISAM要点: 索引文件上不记录数据,只有数据储存地址。MyISAM的索引文件和数据文件分离,查询上先查索引文件,再查数据文件。称为非聚集索引。
数据结构
数据结构
B树,又称多路平衡查找树。所有节点中孩子节点的最大值为此树的阶(用m表示)。每个节点关键字的个数最少有[m/2-1]个,最多有[m-1]个。也即一个m为4的B树,子树节点最多有4个,每个节点关键字(数据)的至多有3个,至少有1个。
B树的数据都在非叶子节点。(所有叶子节点都在同一层次,且不带信息)
B+树,所有数据都在叶子节点。叶子节点有顺序访问指针。可以更好利用计算机的局部缓存原理(当一个数据被用到时,它后面的数据也会马上被用到)。
在实际应用中,度一般是挺大的,一般在100左右。h一般不大,不超过3。
而红黑树的深度一般是很大的,磁盘IO的次数会多。无法利用局部性原理。
而对比B树和B+树来说,B+树由于把数据都放到了叶子节点,每次IO可以获取更多节点,以及叶子节点的顺序访问指针,所以B+树比B树拥有更好新能。