MySQL优化系列3-存储引擎

简介

  1. 插拔式存储引擎(pluggable Storage Engines)这是mysql特有的
  2. 存储引擎是指定在表之上的,即一个库中的每一个表都可以指定独立的存储引擎
  3. 每一种存储引擎都会生成一个frm文件(mysql8取消了该文件)

Innodb

5.5.8版本后的默认存储引擎,之前默认为MyIsam
支持ACIDs事务
支持行锁,支持外键
聚集方式存储数据,每张表的存储都是按照主键的顺序进行存放(如果没有显示的指定主键,会隐式的为每一行生成一个6 byte的rowId作为主键)
因为分词的原因需要通过第三方实现中文全文索引

MyIsam

不支持事务
表锁
支持全文索引
5.5.8版本之前默认存储引擎,临时表也会用到Myisam存储引擎
myisam存储引擎的缓存只缓存索引文件,而不缓存数据文件(mysql8缓存模块去除)
select count(*) from table 不需要扫表

CSV存储引擎

不能定义索引、列定义必须为NOT NULL,不能设置自增列->不适用大表或者数据的在线处理
CSV数据的存储用,隔开,可以直接编辑CSV文件进行数据的编排->数据安全性低
编辑数据文件后,执行flush table xxx生效
应用场景:
数据的快速导入导出
表格直接转换成csv

Archive 存储引擎

只支持insert和select操作
5.1版本后支持索引,只允许自增ID建立索引
使用zlib算法压缩数据进行存储,数据存储为ARZ文件格式
行级锁
不支持事务
数据占用磁盘少
应用场景:
日志系统
大量的设备数据采集

Memory存储引擎

数据存放到内存中,IO效率要比其他引擎高
数据库重启或崩溃数据丢失,内存数据表默认只有16M
经常用在临时表中
支持hash索引,Btree索引,默认使用哈希索引,而不是B+Tree
只支持表锁
不支持TEXT、BLOB、存储varchar时是按照char的方式进行的(耗费内存)
应用场景:
等值查找热度较高数据
查询结果内存中的计算,大多数都是采用这中存储引擎作为临时表存储需要计算的数据

各种索引对比:https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html

原文地址:https://www.cnblogs.com/zh-ch/p/12837634.html