SQL规范性检查

select检查

  1. select 后面字段使用了用户自定义函数,那么SQL返回多少行,自定义函数就会执行多少次,非常影响性能
  2. text类型检查

    select 出现text类型的字段,就会消耗大量的网络和IO带宽,由于返回的内容过大导致程序报错,需要评估谨慎使用

  3. group_cancat谨慎使用

    这是一个字符串聚合函数,会影响SQL响应时间,

  4. 内嵌子查询

    select后面的字段是子查询的方式,SQL返回多少行,子查询就执行多少次,严重影响性能

from检查

  1. 表的链接方式

    不建议使用left join

    1. 子查询

      mysql对from后的子查询处理能力较弱,可以改写inner join

where检查

  1. 索引被列运算
  2. 类型转换
  3. 列字符集,应该使用utf8mb4

    group by检查

  4. 前缀索引

    Group by后面的列有索引,可以消除排序带来的CPU开销,如果是前缀索引,是不能消除排序的。

  5. 函数运算

    Order by 检查

  6. order by 的字段需要有索引,前置也不行

  7. 字段排序: asc 和 desc升降要跟索引保持一致。

    limit检查

  8. limit m,n ,m越大耗时越长,最好先取出主键id,然后根据id再join关联。

    表结构检查

    表&列名关键字

    数据库建模阶段,表名和字段名不能使用mysql的关键字,如desc、order、sattus、group等

    表存储引擎

    针对OLTP业务系统,建议InnoDB

    AUTO_INCREMENT属性

    建表的时候主键id带有AUTO_INCREMENT属性。
    在代码中禁止指定主键id的插入。

    NOT NULL属性

    尽量将字段都添加上NOT NULL DEFAULT VALUE, 如果列值存储了大量的NULL,会影响索引的稳定性

    DEFAULT属性

    建议每个字段都有默认值,禁止DEFAULT NULL

    TEXT

    不建议使用text类型

    索引检查

    前缀索引

    复合索引的顺序

    时间列索引

    created_time和updated_time默认创建索引。