美文网首页
[译] MySQL InnoDB 表最佳实践

[译] MySQL InnoDB 表最佳实践

作者: 翼徳 | 来源:发表于2019-01-18 14:44 被阅读41次

原文地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-best-practices.html

  • 应该给每张表指定一个主键,可以用最常用的单列或多列,假如没有明显的主键,也可以用自增 值作为主键;

  • 基于表中共同的ID,可以使用 join 方式从多张表中获取数据。为了性能更好,建议在 join 相关列上定义 外键,并且要与其他表中相同列的字段类型保持一致。加外键的列要保证被引用的列已经建了索引,这样可以提高性能。外键还会将删除、更新传播到所有受影响的表,如果父表中不存在相应的ID,则会阻止在子表中插入数据。

  • 关闭 autocommit,每秒数以百计次的提交会影响性能(受存储设备写入速度的限制);

  • 将相关 DML 操作集合分组到 事务 中,用 START TRANSACTIONCOMMIT 语句括起来。虽然我们不想时时 COMMIT,但也不希望积累大量没有 COMMIT 的 INSERTUPDATEDELETE 语句;

  • 不要用 LOCK TABLES 语句,InnoDB 可以在不牺牲可靠性或高性能的前提下,允许多个会话同时读取和写入同一个表。如果想要获得一组行的独占写访问权,可以用 SELECT ... FOR UPDATE 锁定要更新的行;

  • 启用 innodb_file_per_table 选项,使用通用表空间将表的数据和索引放入单独的文件中,别放在 系统表空间 中, innodb_file_per_table 选项默认是启用的;

  • 可以在不牺牲 读/写 性能的情况下使用 InnoDB 表或页 压缩 功能;

  • 推荐在启动应用服务时加上参数 --sql_mode=NO_ENGINE_SUBSTITUTION 。可以防止因 CREATE TABLE 语句带 ENGINE= 所导致的将表建在不同引擎上的问题。

相关文章

  • [译] MySQL InnoDB 表最佳实践

    原文地址:https://dev.mysql.com/doc/refman/5.7/en/innodb-best-...

  • [译]Xcode 环境配置最佳实践

    [译]Xcode 环境配置最佳实践 [译]Xcode 环境配置最佳实践

  • [译] MYSQL索引最佳实践

    你做了一个明智的选择 理解索引对开发和dba来说都是极其重要 差劲的索引对产品问题负相当大的一部分责任 索引不是多...

  • Innodb的锁

    Innodb的锁是行级锁 mysql delete是否会锁表 MySQL的InnoDB存储引擎支持行级锁,Inno...

  • MySQL-InnoDB表

    作者:刘仁鹏参考资料:《MySQL技术内幕 InnoDB存储引擎》 1.索引组织表 在InnoDB中,表都是根据主...

  • MySQL常用存储引擎之Innodb

    MySQL默认引擎Innodb Innodb使用表空间进行数据存储 控制参数:innidb_file_per_ta...

  • SQL 规范

    基础规范 表存储引擎必须使用InnoDB MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)...

  • MySQL中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖。 回表查询 要说回表查询,先要从InnoDB的索引实现说起。InnoDB...

  • InnoDB引擎逻辑存储结构

    (本片博文是《MySQL技术内幕 InnoDB存储引擎第二版》的读书笔记) 索引组织表 InnoDB存储引擎中,表...

  • MySQL InnoDB表空间加密

    从 MySQL5.7.11开始,MySQL对InnoDB支持存储在单独表空间中的表的数据加密 。此功能为物理表空间...

网友评论

      本文标题:[译] MySQL InnoDB 表最佳实践

      本文链接:https://www.haomeiwen.com/subject/gyeidqtx.html