15.3 优化数据库结构

15.3.1 将字段很多的表分解成多个表

将表拆分成多个表,分为常用字段与非常用字段,都用到时使用连接(JOIN)查询

15.3.2 增加中间表

适当增加中间表做关联,提高查询速度

15.3.3 增加冗余字段

适当增加冗余字段,可以加快查询速度,减少连接查询

15.3.4 优化插入记录的速度

  1. 对于MyISAM引擎的表常见方法如下:

    1. 禁用索引

      批量插入时候,创建索引会降低插入记录的速度,建议插入前先禁用索引,等插入完成后在开启索引

      // 禁用索引
      ALTER TABLE table_name DISABLE KEYS;
      // 重新开启索引
      ALTER TABLE table_name ENABLE KEYS;

      备注:table_name表示表名

    2. 禁用唯一性检查

      插入时,会对唯一性进行校验

      // 禁用唯一性检查
      SET UNIQUE_CHECKS = 0;
      // 开启唯一性检查
      SET UNIQUE_CHECKS = 1;
    3. 使用批量插入

      插入语句合并,多条INSERT INTO合并成一条INSERT INTO

    4. 使用LOAD DATA INFILE批量导入

      批量导入时候,能用LOAD DATA INFILE就尽量使用,导入方式比INSERT

  2. 对于InnoDB引擎的表,常见优化方式如下

    1. 禁用唯一性检查

      MyISAM引擎方法

      // 禁用唯一性检查
      SET UNIQUE_CHECKS = 0;
      // 开启唯一性检查
      SET UNIQUE_CHECKS = 1;
    2. 禁用外键检查

      // 禁用
      SET foreign_key_checks=0;
      // 启用
      SET foreign_key_checks=1;
    3. 禁止自动提交

      禁止事务的自动提交

      // 禁用
      SET autocommit=0;
      // 启用
      SET autocommit=1;

15.3.5 分析表、检查表和优化表

  1. 分析表:

    语法:

    备注:LOCALNO_WRITE_TO_BINLOG任选一个即可,都是相同含义

    备注2:结果分析:

    Table:表示分析的表的名称

    Op:表示执行的操作,analyze表示进行分析操作

    Msg_type:表示信息类型,其值通常是状态(status)、信息(info)、注意(note)、警告(warning)和错误(error)之一

    Msg_text:显示信息

  2. 检查表:

    用来检查InnoDB引擎和MyISAM引擎的表是否存在错误,对于MyISAM引擎表还有修改表的作用

    语法:

    备注:option只对MyISAM引擎的表有效,各选项意义如下:

    QUICK:不扫描行,不检查错误的连接

    FAST:只检查没有被正确关闭的表

    CHANGED:只检查上次检查后被更改的表和没有被正确关闭的表

    MEDIUM:扫描行,已验证被删除的连接是有效的,也可以计算各行的关键字校验和,并使用计算出的校验合验证这一点

    EXTENDED:对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间比较长

  3. 优化表

    使用OPTIMIZE TABLE语句优化表,该语句对InnoDB引擎和MyISAM引擎的表都有效,但只优化VARCHARBLOBTEXT

    语法:

    备注:LOCALNO_WRITE_TO_BINLOG意义相同,指定不写入二进制日志

最后更新于

这有帮助吗?