序言
mysql的引擎有好多种,不同的引擎有不同的好处,但是又各有各的缺点,不论面试还是工作中,我们涉及最多的就是InnoDB和MyISAM了,其中InnoDB还是首选了,所以本文主要以InnoDB为主,MyISAM为辅,虽然好多的博文都说了数据库引擎,但是我还是要将自己最近的心得拿出来给大家分享一下。
一、数据库引擎是什么?有什么用?
我认为最现实一点的就是面试mysql的时候必问,毕竟这个算是mysql的基础了,不扯了,说重点。
当我们访问数据库的时候,不管是使用可视化工具还是sql命令又或者是应用程序访问,都是操作的数据库引擎,而并非是数据库文件,数据库引擎会将我们发出的一句句sql命令进行执行操作数据库文件,操作完成只会又将结果返回给你,所以对于数据库来说,数据库引擎就是sql解析器,对于我们来说其就是操作数据库的入口。
二、mysql数据库引擎都有那些?
常见到的就是InnoDB、MyISAM、BDB、Memory。其中InnoDB最为常见也是最为常用的。
InnoDB:最容易出现并发问题、最为容易发生死锁、锁的粒度最为低、使用最为复杂
MySAM:最不容易出现并发问题、不会发生死锁、所得粒度最高、使用最为简单
三、InnoDB和MyISAM区别?
1、事务:
InnoDB支持事务
MyISAM不支持事务
2、锁:
InnoDB支持表锁和行锁,在执行不能够确定范围的sql的时候就会使用全表扫描,锁住全表(比如:like)
MyISAM支持表锁,用户操作MyISAM的时候select、update、delete、insert都会自动加锁
3、外键
InnoDB支持外键
MyISAM不支持外键
4、文件存储方式
InnoDB存储的时候索引和数据记录在同一文件中还有一个日志文件,InnoDB表的大小受限于操作系统,正因为这点才能够帮助我们更好的了解索引的数据结构
MyISAM存储的时候又三个文件frm(存储表定义)、myd(存储表数据)、myi(存储表索引)
5、索引缓存
InnoDB使用聚集索引,索引和问价都在同一文件中,不管是索引还是数据都是自己来管理
MyISAM使用非聚集索引,索引和数据分开,只缓存索引,只能管理索引,在索引数据大于分配的资源时,会由操作系统来cache;数据文件依赖于操作系统的cache。
6、查找总行数count()
MyISAM保存由表的总行数,如果select count(*) from table;会直接取出出该值
InnoDB没有保存总行数,如果使用select count(*) from table;就会遍历整个表,
四、总结
只有明白了数据库引擎才能够帮助我们更好的了解数据库的原理,毕竟数据库引擎是我们操作的入口,和我们的应用程序最为息息相关的。也是最为基础的知识。朋友们有什么感觉写的有什么的问题或者有什么不对的地方尽管提出来,及时进行回复和修改。