MySQL数据库引擎
1.ISAM
在设计ISAM之前就考虑到查询的次数要大于数据更新的次数,因此ISAM引擎的读取的效率是非常的快的,不占用大量的内存和存储空间,但是不支持事物的处理,下面分析ISAM引擎的优缺点。
ISAM的优点:
读取数据速度快、不占用大量的内存和存储资源
ISAM的缺点:
不支持事物
不容错
使用ISAM引擎的注意点:
由于他不支持事物的处理,并且不容错,所以必要备份数据。
2.MyISAM
MyISAM是MySQL对于ISAM的扩展引擎,在MySQL5.6以后的版本出现,简单来说ISAM引擎有的东西,它都有,MyISAM提供了索引和字段管理的大量功能,MyISAM还提供了表格锁定的机制用来优化多个并发的读写操作、但是有代价的,要经常运行 OPTIMIZE TABLE 命令来恢复优化过机制所浪费的空间、MyISAM知道自己的缺点所以提供了优化工具、比如MyISAMCHK工具用来恢复浪费的空间。
MyISAM的优点:
增强了ISAM引擎的功能,增加了索引、表格锁的机制优化并发读写
MyISAM的缺点:
因为有了表格锁的机制、最大的缺陷就是不能在表损坏后恢复数据,和ISAM一样不支持事物,数据量越大、写入效率越低。
使用MyISAM引擎的注意点:
数据要备份、虽然有索引提升效率,但是要正确的使用索引,如果索引的字段越多维护索引的信息就会越多,随着数据量的增加,相对的效率也会降低。
使用MyISAM引擎生成的文件
如果使用MyISAM数据库引擎,会生成三个文件:
.frm:表结构信息
.MYD:数据文件
.MYI:表的索引信息
3.InnoDB引擎
InnoDB数据库引擎是直接造就MySQL辉煌的引擎,他能弥补ISAM、MyISAM的不足之处,他能支持事物的处理、也能支持外键、尽管比ISAM、MyISAM的查询速度慢一点,但是自身‘全能’的优点完全可以胜出,现在MySQL5.6以上的版本默认的数据库引擎是InnoDB引擎MySQL,官方对InnoDB是这样解释的:InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读,这些特色增加了多用户部署的性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
InnoDB的优点:
遵循ACID模式设计,具有事务,回滚和保护用户数据的崩溃恢复能力,InnoDB为大数据量发挥最大性能而设计的,针对提升CPU的效率而生,其它任何基于磁盘的关系数据库引擎都不能和它做比较。
InnoDB的缺点:
没有MyISAM、ISAM查询速度来的快。
InnoDB引擎的特点:
-
支持事务
-
数据多版本读取(InnoDB+MyISAM+ISAM)
-
锁定机制的改进
-
实现外键
innodb与myisam区别
-
InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin transaction和commit之间,组成一个事务;
-
InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
-
InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
-
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
-
Innodb不支持全文索引。支持全文索引,查询效率上MyISAM要高。