MySQL常用的四种引擎的介绍
(1):MyISAM存储引擎:
不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以select,insert为主的应用基本上可以用这个引擎来创建表,适合写多的情况。
frm存储当前数据表的结构,MYD存储当前表的数据,MYI存储当前数据表的索引
支持表级锁,有两种表模式,读锁和写锁
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择
(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。
(2)InnoDB存储引擎
该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM引擎,写的处理效率会差一些,并且会占用更多的磁盘空间以保留数据和索引。
InnoDB存储引擎的特点:支持自动增长列,支持外键约束
Innodb 事务 外键 行级锁 .frm:表结构 .ibd:数据和索引
行级锁(开销大,加锁慢,会出现死锁,死锁一般会自动检测到,会让一个事务去释放锁并回退,另一个事务去获得锁,锁粒度比较小,适合并发量大的写入),
所模式有共享锁和排他锁。
执行update delete insert 语句时会加排他锁,执行select语句时不会加任何锁
如果两个线程同时访问时,加共享锁时会出现死锁,所以一般情况下会加排它锁
UPDATE,出于性能方面的考虑,应该使用InnoDB表
(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。
(3):MEMORY存储引擎
memory:只存表结构,支持hash索引 数据存储内存DBMS, 只有一个frm表结构。
Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引有其不同的使用范围
Hash索引优点:
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。
Hash索引缺点: 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;
Memory类型的存储引擎主要用于哪些内容变化不频繁的代码表,或者作为统计操作的中间结果表,便于高效地对中间结果进行分析并得到最终的统计结果,对存储引擎为memory的表进行更新操作要谨慎,因为数据并没有实际写入到磁盘中,所以一定要对下次重新启动服务后如何获得这些修改后的数据有所考虑。
(4)MERGE存储引擎
MRG_mysiam:相当于存储一个Mysiam集合,实际存储在Union表中
Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。