什么是存储引擎

存储引擎就是存储数据、建立索引、更新、查询数据等技术的实现方式。

mysql体系结构

  • MySQL服务端的组成:

    • 连接层:通过网络或本地socket和客户端通信,登录、授权认证等安全方案。

    • 服务层:接收SQL语句,进行语句分析,下发指令让引擎层执行。

    • 引擎层:存储引擎真正的负责了 MySQL 中数据的存储和提取,不同的需求可以使用不同的引擎。

    • 存储层:文件系统,用于存储数据。并完成与存储引擎的交互。

      • IO操作:Input (数据存储到磁盘) Output (从磁盘读取数据)

      • 常用引擎:

        • InnoDB(默认):支持事务(ACID)、支持行级锁、聚簇索引,适合高并发、高安全场景,金融、电商、订单系统。

        • MyIsAM:不支持事务、支持表级锁,适合对事务没要求、读多写少的场景。被MongoDB替代;

        • MEMORY:内存型存储引擎,支持哈希(hash)索引,优点:读写速度快;缺点:断电数据会丢失。适合缓存临时数据。被Redis替代了;

        • CSV: 文本存储,列与列默认用“逗号”分隔;

          优点:可直接用文本编辑器查看或修改数据,兼容性强(适合与其他系统交换数据)。

          缺点:性能差,不支持事务、索引、锁

          适合:简单的数据存储例如:日志

引擎选择

InnoDB 引擎与 MyISAM 引擎的区别 ?

1.InnoDB 引擎, 支持事务, 而 MyISAM 不支持。

2.InnoDB 引擎, 支持行锁和表锁, 而 MyISAM 仅支持表锁, 不支持行锁。

3.InnoDB 引擎, 支持外键, 而 MyISAM 是不支持的。

区别及特点

功能

MyISAM

MEMORY

InnoDB

存储限制

256TB

RAM

64TB

支持事务

No

No

Yes

支持全文索引

Yes

No

Yes

支持树索引

Yes

Yes

Yes

支持哈希索引

No

Yes

Yes

支持数据缓存

No

N/A

Yes

支持外键

No

No

Yes

指令语法

 # 查询当前数据库支持的存储引擎
 show engines;
 ​
 # 建表时指定引擎
 CREATE TABLE user (
  id INT,
  name VARCHAR(50)
 ) ENGINE = INNODB;
 ​
 # 某个表的存储引擎
 SHOW TABLE STATUS LIKE '你的表名';
 ​
 # 查看所有表
 SHOW TABLE STATUS;
 ​
 注:如果是 MySQL 5.5 之前,默认引擎可能是 MyISAM;之后默认是 InnoDB。