热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

一生热爱回头太难。在mysql5.5之前,默认使用的是Myisam引擎,5.5之后,默认使用InnoDB引擎。关于二者区别一直是重要的问题

一生热爱
回头太难。


在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。
在这里插入图片描述



推荐阅读
author-avatar
日光覃城_751
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有