mysql数据库引擎
如何选择存储引擎?
- 是否要支持事务,如果要请选择innodb,如果不需要可以考虑myISAM
- 如果表中绝大多数都是度查询,可以考虑myISAM,如果读写也挺频繁,请使用innodb
- Mysql5.5版本开始innodb已经成为mysql的默认引擎(之前是myISAM),说明其优势是有目共睹的,如果不知道用什么,那就用innodb,至少不会差
常用存储引擎之myISAM(5.5以前)
存储方式:
- 创建表的存储引擎为myISAM
Create table test (id bigint not null primary key auto increment,name varchar(20))engine=myidsam
- myISAM文件系统
通过show global bariables like “%datadir%”命令可以找到你的数据库存放数据的目录
Test.frm(表结构)test.Myd(表信息)test.myl(索引信息)
特性:
- Myisam使用的是表级锁而不是行级锁,当对数据进行修改时会对整个表加锁,所以myISAM对于写操作的并发性不是很好
- myISAM不提供支持事务,不适合写操作
- myISAM支持索引数据压缩(myisampack-b-f myisam.myl),压缩后可以减少磁盘IO,但是压缩后不支持写作操作。
- myISAM用一个变量保存了整个表的行数,执行select count(*)from table 时只需要读出该变量即可,速度很快
使用场景:
- 非事务的应用
- 读多写少,如报表
常用存储数据引擎Innodb(5.5以后)
把索引和数据都放在ibd文件
特性:
- 支持事务,对于Innodb一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务
- Innodb不保存表的具体行数,执行select count(*)from table 时需要全表扫描。而myISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出变量即可,速度很快
- 行级锁,在对数据库操作时,锁定的资源更少,最大程度支持并发。事务的隔离必须通过锁来实现