MySql数据库引擎

mysql数据库引擎


如何选择存储引擎?

  1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑myISAM
  2. 如果表中绝大多数都是度查询,可以考虑myISAM,如果读写也挺频繁,请使用innodb
  3. 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(索引信息)

特性:

  1. Myisam使用的是表级锁而不是行级锁,当对数据进行修改时会对整个表加锁,所以myISAM对于写操作的并发性不是很好
  2. myISAM不提供支持事务,不适合写操作
  3. myISAM支持索引数据压缩(myisampack-b-f myisam.myl),压缩后可以减少磁盘IO,但是压缩后不支持写作操作。
  4. myISAM用一个变量保存了整个表的行数,执行select count(*)from table 时只需要读出该变量即可,速度很快

使用场景:

  1. 非事务的应用
  2. 读多写少,如报表

常用存储数据引擎Innodb(5.5以后)

把索引和数据都放在ibd文件

特性:

  1. 支持事务,对于Innodb一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务
  2. Innodb不保存表的具体行数,执行select count(*)from table 时需要全表扫描。而myISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出变量即可,速度很快
  3. 行级锁,在对数据库操作时,锁定的资源更少,最大程度支持并发。事务的隔离必须通过锁来实现

你可能感兴趣的:(mysql)