跳到主要内容

存储引擎

存储引擎就是指表的类型。接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

一、查看存储引擎相关的参数

1、查看存储引擎

show engines;

2、查看默认的存储引擎

show variables like '%default_storage_engine%';
select @@default_storage_engine;

3、修改默认的存储引擎

  • 执行 sql
SET DEFAULT_STORAGE_ENGINE=MyISAM;
  • 修改 my.cnf(需重启 mysql 服务)
default-storage-engine=MyISAM 

4、设置/修改表的存储引擎

不同的表可以设置不同的存储引擎。

  • 创建表的时候设置存储引擎
create table emp_mysiam(
id int primary key
) engine = myisam
  • 修改表的存储引擎
alter table emp_myisam engine = innodb;

二、InnoDB

  • 支持外键
  • <span style="color: red">支持事务</span>(commit、rollback)
  • 支持行级锁
  • 会缓存索引和真实数据
  • <span style="color: red">InnoDB 是为处理巨大数据量的最大性能设计的</span>
  • 写效率比 MyISAM 差,且会占用更多的磁盘空间以保存数据和索引
  • InnoDB 不仅缓存索引,还缓存数据,所以 <span style="color: red">InnoDB 对内存要求较高</span>,内存大小对性能有决定性影响
  • <span style="color: red">5.5 及以后的默认的存储引擎</span>
  • 数据结构文件
    • 表名.frm:存储表结构(MySQL 8.0 之后合并到 表名.idb 中)
    • 表名.idb :存储表数据

三、MyISAM

  • 不支持事务、行级锁、外键,只支持表级锁。(崩溃后无法恢复)
  • <span style="color: red">5.5 之前默认的存储引擎</span>
  • 访问速度快。(用于对事物没有要求或以 selec、update为主的应用)
  • 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
  • 只缓存索引,不缓存真实数据

四、Archive

五、Blockhole

六、CSV

七、Memory

八、Federated

九、Merge

十、NDB