MySQL数据库InnoDB与MyISAM区别

数据库存储引擎区别

InnoDB

特点: 行级锁,支持事务处理,支持外键,

行锁实现,根据索引条件检索数据使用行锁。

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树拥有更好新能。

MyISAM的索引结构

MyISAM的索引使用B+树实现,叶子节点记录数据的储存地址。主索引和辅助索引结构相同,区别在于主索引是唯一的,而辅助索引可以重复。查询过程为:先查询B+树查询索引,得到数据地址,再根据地址读取数据。这种索引方式称为非聚集索引

InnoDB索引结构

InnoDB中数据文件本身就是索引文件。索引也使用B+树实现,叶子节点储存数据。索引文件本身需要按主键构建(所以InnoDB需要必须有主键,没有指定会默认生成)。InnoDB的辅助索引底层储存的是主键的值。然后再根据主键的值去主键索引(也相当于数据文件)去查找相应的值。
InnoDB这样的聚集式索引会使得主键的检索十分高效。若使用辅助索引,需查询2遍索引。

最好不要使用过长的主键,因为辅助索引会引用主键值。主键最好是自增的,防止为维护B+树而频繁分裂调整树结构。

MyISAM要点: 索引文件上不记录数据,只有数据储存地址。MyISAM的索引文件和数据文件分离,查询上先查索引文件,再查数据文件。称为非聚集索引。
InnoDB要点:索引文件就是一个B+树结构的索引,这个索引的叶子节点储存数据,成为聚集索引。若有其他索引,则储存主键索引的值,然后再去主键索引查找真正的数据。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值