SQL规范性检查
select检查
- select 后面字段使用了用户自定义函数,那么SQL返回多少行,自定义函数就会执行多少次,非常影响性能
text类型检查
select 出现text类型的字段,就会消耗大量的网络和IO带宽,由于返回的内容过大导致程序报错,需要评估谨慎使用
group_cancat谨慎使用
这是一个字符串聚合函数,会影响SQL响应时间,
内嵌子查询
select后面的字段是子查询的方式,SQL返回多少行,子查询就执行多少次,严重影响性能
from检查
表的链接方式
不建议使用left join
- 子查询
mysql对from后的子查询处理能力较弱,可以改写inner join
- 子查询
where检查
- 索引被列运算
- 类型转换
-
group by检查
前缀索引
Group by后面的列有索引,可以消除排序带来的CPU开销,如果是前缀索引,是不能消除排序的。
-
Order by 检查
order by 的字段需要有索引,前置也不行
-
limit检查
limit m,n ,m越大耗时越长,最好先取出主键id,然后根据id再join关联。
表结构检查
表&列名关键字
数据库建模阶段,表名和字段名不能使用mysql的关键字,如desc、order、sattus、group等
表存储引擎
AUTO_INCREMENT属性
建表的时候主键id带有AUTO_INCREMENT属性。
在代码中禁止指定主键id的插入。NOT NULL属性
尽量将字段都添加上NOT NULL DEFAULT VALUE, 如果列值存储了大量的NULL,会影响索引的稳定性
DEFAULT属性
TEXT
索引检查
前缀索引
复合索引的顺序
时间列索引
created_time和updated_time默认创建索引。