mysql性能优化3:常用的存储引擎介绍

语言: CN / TW / HK

1. 概述

本文将简要介绍下mysql中常见的存储引擎及其特性对比

Mysql的存储引擎有以下特点:

1,插拔式的插件方式

2,存储引擎是指定在表之上的,即一个库中的每一个表都可以指定专用的存储引擎。

3,不管表采用什么样的存储引擎,都会在数据区,产生对应的一个frm文件(表结构定义描述文件)

2. mysql常见的存储引擎

2.1. CSV存储引

数据存储以CSV文件

  • 特点:

    • 不能定义没有索引、列定义必须为NOT NULL、不能设置自增列 -->不适用大表或者数据的在线处理

    • CSV数据的存储用,隔开,可直接编辑CSV文件进行数据的编排 -->数据安全性低

注: 编辑之后,要生效使用flush table XXX 命令

  • 应用场景:

    • 数据的快速导出导入

    • 表格直接转换成CSV

2.2.Archive存储引擎

压缩协议进行数据的存储 数据存储为ARZ文件格式

  • 特点:

    • 只支持insert和select两种操作

    • 只允许自增ID列建立索引

    • 行级锁

    • 不支持事务

    • 数据占用磁盘少

  • 应用场景:

    • 日志系统

    • 大量的设备数据采集

2.3.Memory 存储引擎

数据都是存储在内存中,IO效率要比其他引擎高很多 服务重启数据丢失,内存数据表默认只有16M

  • 特点:

    • 支持hash索引,B tree索引,默认hash(查找复杂度0(1))

    • 字段长度都是固定长度varchar(32)=char(32)

    • 不支持大数据存储类型字段如 blog,text

    • 表级锁

  • 应用场景:

    • 等值查找热度较高数据

    • 查询结果内存中的计算,大多数都是采用这种存储引擎

    • 作为临时表存储需计算的数据

2.4.Myisam

Mysql5.5版本之前的默认存储引擎

较多的系统表也还是使用这个存储引擎

系统临时表也会用到Myisam存储引擎

  • 特点:

    • select count(*) from table 无需进行数据的扫描

    • 数据(MYD)和索引(MYI)分开存储

    • 表级锁

    • 不支持事务

参考:

https://mp.weixin.qq.com/s/FUXPXKfKyjxAvMUFHZm9UQ

2.5.Innodb

Mysql5.5及以后版本的默认存储引擎

特点:

  • Its DML operations follow the ACID model [事务ACID]

  • Row-level locking[行级锁]

  • InnoDB tables arrange your data on disk to optimize queries based on primary keys[聚集索引(主键索引)方式进行数据存储]

  • To maintain data integrity, InnoDB supports FOREIGN KEY constraints[支持外键关系保证数据完整性]

参考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-introduction.html

3. 小结

重点关注下innodb的特有属性:分布式索引、数据缓存、外键支持、行锁、MVCC、事务……

参考:

https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html

分享到: