MySQL运维实战(4.1) MySQL表存储引擎

俊达3年前技术文章837

MySQL表的特点

和其他数据库如Oracle、SQL Server相比,mysql有一些特点:

  • MySQL使用插件式存储引擎,同一个数据库中的表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式。表可以在不同的存储引擎之间转换。

  • 参数sql_mode。sql_mode会影响sql的执行。同一个sql,在不同的sql_mode下可能会有差异。


表的存储引擎

MySQL支持插件存储引擎。系统默认支持多种存储引擎。同时提供了接口,支持第三方开发存储引擎,以满足特定的数据存储需求。

oracle mysql官方存储引擎

使用show storage engines命令或查询information_schema.engines表查看当前实例支持的存储引擎。

mysql> select engine, support, transactions, xa, savepoints from information_schema.engines;
+--------------------+---------+--------------+------+------------+
| engine             | support | transactions | xa   | savepoints |
+--------------------+---------+--------------+------+------------+
| InnoDB             | DEFAULT | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | NO           | NO   | NO         |
| MEMORY             | YES     | NO           | NO   | NO         |
| BLACKHOLE          | YES     | NO           | NO   | NO         |
| MyISAM             | YES     | NO           | NO   | NO         |
| CSV                | YES     | NO           | NO   | NO         |
| ARCHIVE            | YES     | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | NO           | NO   | NO         |
| FEDERATED          | NO      | NULL         | NULL | NULL       |

各存储引擎特点


存储引擎

特点

InnoDB

  • 支持事物。

  • 支持MVCC多版本。并发读写性能高。

MyISAM

早期版本的默认存储引擎。

  • 不支持事物。

  • mysql实例或所在主机异常crash的情况下,可能会有数据丢失

  • 表容易crash,需要修复。大表修复耗时可能会很长。

  • mysql的一些系统表是myisam存储引擎

  • 索引数据在mysql内部缓存,受参数key_buffer_size控制

  • 数据由OS文件系统的Page Cache缓存。

MRG_MYISAM

本身不存储数据,可以将多个MyISAM表模拟成一个单独的表使用。

方便历史数据清理归档。

Memory

  • 数据存储在内存中,实例重启会清空数据。

  • mysql一些内部表使用了memory引擎。

  • 业务上要避免使用memor存储引擎。

  • 在主备复制架构下,主库或备库重启,容易引起主备复制中断。

  • 每个表可存储的数据受参数max_heap_table_size控制

CSV

  • csv文件格式。

  • 外部csv文件可以通过csv表挂到mysql中,用于数据分析。

  • 不支持索引。

  • mysql slow log可以以csv格式存储,便于数据采集和分析。

Blackhole

不存储数据。

Archive

归档存储。不支持索引。

PERFORMANCE_SCHEMA

mysql系统内部表。

Federated

本身不存储数据。从其他数据库实例获取数据。类似oracle的db link。



绝大部分情况下,建议业务统一使用InnoDB存储引擎。mysql 5.7开始默认存储引擎就是innodb。

第三方存储引擎

社区的一些存储引擎:

TokuDB,数据压缩比高。

LevelDB存储引擎,基于LSM Tree(log structured merge tree)的存储引擎。

MyRocks,RocksDB存储引擎,基于LSM Tree(log structured merge tree)。


相关文章

 MySQL运维实战之Clone插件(10.1)使用Clone插件

MySQL运维实战之Clone插件(10.1)使用Clone插件

clone插件介绍mysql 8.0.17版本引入了clone插件。使用clone插件可以对本地l或远程的mysql实例进行clone操作。clone插件会拷贝innodb存储引擎表,clone得到的...

MySQL运维实战(5.2) MySQL charset基本概念

mysql多字符集mysql支持多字符集。一个数据库中可以存储不同字符集的数据,一个表的不同字段可以使用不同的字符集。mysql> show character s...

MySQL运维实战之备份和恢复(8.9)xtrabackup备份指定表

备份部分表如果实例设置了参数innodb_file_per_table,xtrabackup可以备份部分表。通过--tables,--tables-file,--databases,--databas...

MySQL优化器特性(六)表扫描成本计算

全表扫描成本使用optimizer_trace,或者使用explain format=tree, 或者explain format=json,可以查看查询的costmysql> exp...

MySQL运维实战(4.9) SQL_MODE之NO_UNSIGNED_SUBTRACTION

在mysql数据库中,unsigned表示不存负数,如果unsigned类型的字段作运算,得到的结果为负数,SQL会报错。mysql> create table t...

MySQL运维实战之备份和恢复(8.4)xtrabackup恢复全量备份

恢复全量备份恢复全量备份大致可以分成以下几步:解压备份文件、prepare备份文件、将数据copy到目标实例相关目录、启动数据库实例。解压文件如果备份时使用了xbstream,需要先解压备份文件。我们...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。