使用mysql,性能提升来说,有必要学习存储引擎的知识。现在最流行的MySQL两大存储引擎的比较。
怎样在mysql数据库查看所有存储引擎?
使用命令:show engines;show create table 表名
。
或者查看可用的存储引擎:
使用命令:show variables like 'storage_engine'
。
mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
最常使用的2种mysql存储引擎。
MyISAM、InnoDB区别:
Myisam是Mysql的默认存储引擎,当create创建新表时,未指定存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。
InnoDB提供具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
对于MYSQL你要使用事务以及行级锁就必须使用InnoDB引擎。
InnoDB不支持FULLTEXT类型的索引。你要使用全文索引,那必须使用myisam。
InnoDB的实用性,安全性,稳定性更高但是效率比MYISAM稍差,但是有的功能是MYISAM没有的。建议你下个mysql5.1说明文档看看这几个存储引擎的区别!
锁
MyISAM只支持表级锁,而InnoDB支持行级锁和表级锁默认为行级锁(locking on row level)。
InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”。
事务(myisam不支持事务)
数据文件构成
外键(innoDB支持;MyISAM表不支持外键)
读取速度(MyISAM读取速度快)
表的具体行数(MyISAM存入内存中,读取快)
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的。
MyISAM引擎的表在大量高并发的读写下会经常出现表损坏的情况。
对于count()查询来说MyISAM更有优势。
读性能。提高表的查询效率要用MyISAM引擎。
写性能。数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
InnoDB在高并发的情况下,相信InnoDB的表现肯定要比MyISAM强很多。
稳定性、方便的扩展性和高可用性来说的话,性能较好,功能较弱来说,MyISAM是首选。
读多写少的项目,而MyISAM的读性能是比Innodb强不少的。
MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
最主要的差别就是Innodb支持事务处理、存储过程、外键、视图、行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。
MyISAM,InnoDB这两种都支持存储过程。
区别在于:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,
而InnoDB提供事务支持已经外部键等高级数据库功能。
MySQL数据库的学习笔记。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫