ISAM(Index Sequential Acess Method)
主要用于读远大于写的环境下
优点:查询速度非常快 占用内存等资源少
缺点:不支持事物,没有索引和锁功能,且无法容错,使用时要注意备份数据
MYISAM(是ISAM的升级版本)
新增功能:索引、锁(用来优化并发性能)
由于加入了锁所以经常要使用 OPTIMIZE TABLE命令释放被更新操作占用的空间
MYISAM擅长快速读取所以常用于web开发中
缺点:不能数据容错依然要手动备份数据,不支持事物
运行该引擎会产生3类文件,
1、.frm的表结构文件
2、.MYD 表数据文件
3、.MYI 表索引文件
Innodb
相比于前两种引擎,innodb查询慢一些,但是支持实物和外键,支持行锁
Innodb专门为处理大批量数据为设计,cpu利用率高
优点:
1、支持事物(每条sql默认都是一个事物,效率慢,所以建议把多个sql语句放入到begin transaction 和 commit中)
2、数据库多版本读取(Innodb+MYISAM+ISAM都支持)
3、锁机制的改进
4、支持外键(如果把包含外键的Innodb表转换为MYISAM会失败)
MYISAM和Innodb
Innodb是聚集索引,索引文件和数据文件在一起,索引建表必须要有主键
通过主键检索数据效率很高
但是辅助索引检索数据需要先检索到主键,然后通过主键再检索到数据
MYISAM是非聚集的,索引文件和数据文件是独立的,主键索引和辅助索引是独立的
Innodb不保存数据的行数,执行select count(*) from ...时进行权标扫描,
而MYISAM则通过一个变量保存这个表的行数
Innodb不支持全文索引,MYISAM支持全文索引,查询效率上高于MYISAM
选择策略
1、如果没有特殊需求就使用默认的Innodb
2、如果不需要支持事物且读远大于写则可以考虑MYISAM
引擎相关命令
1、查看当前数据支持的引擎
show engines
2、查看默认数据库引擎
show variables like '%storage_engine%'
3、 查看某张表所用的存储引擎
show create table tableName
4、创建表时指定存储引擎
create table t1 (id int) engine=engin_name(MYISAM/INNODB)
5、修改存储引擎
alter table t1 engine=INNODB