什么是存储引擎?

 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的
存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力,此种技术称为存储引擎。

 

MySQL 支持多种存储引擎,其中目前应用最广泛的是InnoDB和MyISAM两种,下面我们主要介绍这两种存储引擎各自的特点以及它们之间的区别。

 

 MyISAM 存储引擎


MyISAM 引擎特点

  • 不支持事务
  • 表级锁定
  • 读写相互阻塞,写入不能读,读时不能写
  • 只缓存索引
  • 不支持外键约束
  • 不支持聚簇索引
  • 读取数据较快,占用资源较少
  • 不支持MVCC(多版本并发控制机制)高并发
  • 崩溃恢复性较差
  • MySQL5.5.5 前默认的数据库引擎

 MyISAM 存储引擎适用场景 

  • 只读    (或者写较少)
  • 表较小(可以接受长时间进行修复操作)

MyISAM 引擎文件

  • tbl_name.frm     表格式定义
  • tbl_name.MYD   数据文件
  • tbl_name.MYI    索引文件 

 

 InnoDB 引擎

InnoDB引擎特点

  • 行级锁
  • 支持事务,适合处理大量短期事务
  • 读写阻塞与事务隔离级别相关
  • 可缓存数据和索引
  • 支持聚簇索引
  • 崩溃恢复性更好
  • 支持MVCC高并发
  • 从MySQL5.5后支持全文索引
  • 从MySQL5.5.5开始为默认的数据库引擎


InnoDB数据库文件 

 数据文件(存储数据和索引):tb_name.ibd
表格式定义:tb_name.frm 

 

查看存储引擎

  查看mysql支持的存储引擎:

show engines;

mysql常见的存储引擎以及特点_聚簇索引

  查看当前默认的存储引擎:

show variables like '%storage_engine%';

mysql常见的存储引擎以及特点_聚簇索引_02

设置默认的存储引擎:

vim /etc/my.cnf
[mysqld]
default_storage_engine= InnoDB

查看数据库中所有表使用的存储引擎:

show table status from db_name;

设置表的存储引擎:

CREATE TABLE tb_name(... ) ENGINE=InnoDB;
ALTER TABLE tb_name ENGINE=InnoDB;