作者:日光覃城_751 | 来源:互联网 | 2024-10-16 19:52
一生热爱
回头太难。
在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。