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

俊达2年前技术文章788

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运维实战之ProxySQL(9.1)ProxySQL介绍

MySQL运维实战之ProxySQL(9.1)ProxySQL介绍

mysql通过复制技术实现了数据库高层面的可用,但是对于应用来说,当后端MySQL发生高可用切换时,应该怎么处理?我们考虑几种方案:1、使用域名绑定。应用通过dns连接后端实例,当后端发生切换后,将d...

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

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

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

MySQL运维实战之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

如果后端MySQL使用了Group Replication,可通过配置mysql_group_replication_hostgroups表来实现高可用mysql_group_replication_...

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

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

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

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

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

MySQL优化器特性(五)单表访问路径

数据库的访问路径(access path)是指从表中获取数据的方式,一般可以通过扫描表或通过索引获取数据。想熟练掌握SQL优化技能,首先需要熟悉单表访问路径。本文先简单介绍MySQL支持的各种单表访问...

发表评论    

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