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

俊达2年前技术文章670

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运维实战(1.2)安装部署:使用二进制安装部署

MySQL运维实战(1.2)安装部署:使用二进制安装部署

一般在生产环境,我们会使用二进制安装的方式安装MySQL。使用二进制安装,在处理单机多实例、升级MySQL等场景下更加方便。如果有特殊的需求(比如要打一些patch),我们还可以自己编译二进制。1、下...

MySQL运维实战(4.8) SQL_MODE之NO_ENGINE_SUBSTITUTION

开启NO_ENGINE_SUBSTITUTION,建表时如果指定的存储引擎不可用或不存在,SQL报错。否则会使用默认的存储引擎替换。如果不设置NO_ENGINE_SUBSTITUTION,建表时指定的...

 MySQL优化器特性(九)行数评估

MySQL优化器特性(九)行数评估

查询的行数在成本计算中起了很重要的作用:1、row_evaluate_cost和行数直接相关2、需要访问多少索引页面,和行数直接相关。根据页面大小和平均索引条目长度计算每个索引页面的记录数,根据记录数...

MySQL运维实战之Clone插件(10.2)Clone插件原理

MySQL运维实战之Clone插件(10.2)Clone插件原理

clone插件实现clone操作主要分为几个阶段:1、初始阶段。初始阶段,会开启页面跟踪(Page Tracking)。开启页面跟踪后,修改过的页面的编号会被记录下来。页面的修改可分为两个阶段:首先在...

MySQL运维实战(4.6) SQL_MODE之NO_BACKSLASH_ESCAPES

设置NO_BACKSLASH_ESCAPES后,反斜杠(\)不作为转义符。不设置NO_BACKSLASH_ESCAPES时,反斜杠(\)用来转义后一个字符mysql> create&n...

MySQL运维实战(2)MySQL用户和权限管理

MySQL用户管理基本命令创建用户使用create user命令创建用户create user 'username'@'host' ide...

发表评论    

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