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

作者:俊达

MySQL表的特点

MySQL是一种开源的关系型数据库管理系统,与Oracle、SQL Server等数据库相比,有两个关键的特点:

  • 存储引擎灵活性: MySQL的插件式存储引擎使得用户可以根据具体需求选择不同的引擎,即在同一个数据库中的不同表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式,包括数据的组织方式、索引的结构等,表也可以在不同的存储引擎之间转换。而其他一些数据库可能较为固定或仅支持特定的存储引擎。
  • sql_mode的影响: MySQL的sql_mode参数影响SQL语句的执行方式。它定义了MySQL对SQL语句的解释和执行规则,同一个SQL语句在不同的sql_mode下可能会有不同的执行结果。sql_mode可以控制MySQL的行为。

表的存储引擎

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。

第三方存储引擎
在 MySQL 社区中有一些第三方存储引擎,它们在特定的使用场景下可能具有一些优势:

  1. TokuDB: 以支持高度压缩为特点,能够在高度压缩数据的同时,快速执行插入和查询操作,一般适用于需要处理大量数据并希望减小存储空间占用的场景。
  2. LevelDB :基于 LSM Tree (log structured merge tree)结构的存储引擎。能够提供高性能的随机写入,并在后台使用多层次的存储结构进行数据的排序和合并,适用于需要高吞吐量和对写入性能要求较高的场景。
  3. MyRocks:基于 RocksDB 的 MySQL 存储引擎,同样使用了 LSM Tree (log structured merge tree)结构。它专注于优化写入性能和存储效率,适用于大规模写入的场景。

在实际的应用当中,应该基于需求,结合具体场景来选择最为合适的存储引擎,从而更好的优化数据库性能。值得注意的是,使用第三方存储引擎可能需要谨慎考虑,因为它们可能不同于 MySQL 默认的 InnoDB 存储引擎,可能需要特定的配置和调优。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

你可能感兴趣的:(MySQL运维实战,mysql,运维,数据库)