常见sql优化
- 对于执行时间较长的SQL,可用explain来获取执行计划,type最好到range或者ref级别,可查看key是否走了索引;
- 删除时尽量使用逻辑删除,避免删除太多影响页目录索引
- 尽量inno join ,因为他是取得并集,而left或者right会连接其他表不存在的数据,查询的结果集较多;
- 尽量使用union all,因为union会有重复的而且需要排序,union all则不需要;
- 删除或者修改多条数据时,尽量批量操作,大范围操作可能会遇到锁;
- join的表不必要太多,不超过五个;
- 使用union代替or
- 读写分离和分库分表
- 主键尽量使用int或者bigint递增,方便维护页目录索引,方便查询
- varchar尽量代替char,char可能会有空字符;
- 先where后groupby,代替先groupby后having;
- 针对于innodb的回表查询,例如:select age from student where name=‘张三’,会先通过name索引到非聚集索引查询到张三的主键,然后根据主键回表到聚集索引查询age信息,可以将age,name和主键三个字段设为覆盖索引,这样可避免第二次回表查询;