关于数据库引擎InnoDB和Myisam区别

一生热爱
回头太难。

在mysql5.5之前,默认使用的是Myisam引擎,5.5之后,默认使用InnoDB引擎。关于二者区别一直是重要的问题,选择合适的数据库引擎对于开发的帮助是巨大的。

事务

Myisam不支持事务,因此在开发中需要使用事务的优先选择InnoDB,况且在需求越来越复杂的时代,事务按理说是必不可少的。

索引

先说一下2个概念

  • 非聚集索引

索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同。

  • 聚集索引

数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。如果某索引不是聚集索引,则表中的行物理顺序与索引顺序不匹配,与非聚集索引相比,聚集索引有着更快的检索速度。

概念有点抽象,我们结合实际理解一下。众所周知,Myisam和InnoDB使用的数据结构都是B+树。

Myisam使用的是非聚集索引,也就是树节点存储的是数据的指针(地址),当查找数据的时候,首先找到树节点相对应的指针,再根据指针去数据实际存储的位置查找真正的数据。(索引文件和数据文件是分离的)。

InnoDB使用的是聚集索引,也就是树节点实际存储的就是真实的数据,当查找数据的时候,查找到相对应的叶子结点对应的数据就结束了。(叶节点包含了完整的数据记录)。

二者有点类似于对象访问方式的句柄访问和直接指针访问。

毫无疑问,InnoDB的查找效率比Mysima高很多。

这里的InnoDB的聚集索引有些需要注意的地方需要说明一下。
在使用InnoDB索引的时候,InnoDB默认在主键建立索引。推荐使用整形自增主键,没有主键的话数据库底层则寻找不重复的一列建立索引,如果没有不重复的一列,那数据库底层则自动生成唯一列维护索引。
如果是非主键索引,结构叶子节点存储的就是主键值了,再根据主键值寻找数据,保证数据一致性和节约存储空间。

锁粒度

Myisam使用的是表锁,不支持高并发。
InnoDB使用的是行锁,支持高并发。

外键

Myisam不支持外键。
InnoDB支持外键。

全文索引

Myizam支持全文索引。
InnoDB不支持全文索引。不过可以通过中间件实现,比如Solr,ElasticSearch.

文章持续更新,可以微信搜索「 绅堂Style 」第一时间阅读,回复【资料】有我准备的面试题笔记。
GitHub https://github.com/dtt11111/Nodes 有总结面试完整考点、资料以及我的系列文章。欢迎Star。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值