头图

作者:俊达

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控制
    CSVcsv文件格式。
    外部csv文件可以通过csv表挂到mysql中,用于数据分析。
    不支持索引。
    mysql slow log可以以csv格式存储,便于数据采集和分析。
    Blackhole不存储数据。
    Archive归档存储。不支持索引。
    PERFORMANCE_SCHEMAmysql系统内部表。
    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


云掣科技
40 声望12 粉丝

专注于云msp服务