1.面对问题SQL的思考

  • 这条查询SQL的语句到底有没有问题?
  • 存在什么问题? 什么情况下存在问题?
  • 怎么去优化?

 

2.SQL优化思路

  •   where查询字段是否建立索引?
  • 是否有建立索引但是查询时候没有用到索引,比如说 status != 1 这种查询方式
  • 如果有多个查询条件,是否可以使用联合索引? (一个联合索引就可以解决不需要建立三个索引)
  • 使用explain去发现问题
  • 是否存在深度分页问题?  (在select * from查询下如果分页十万条去取数据,将非常恐怖)
  • 深度分页问题可以考虑使用子查询(先将查询数据的主键id查询出来,在用in去查询数据字段),主要因为回表问题
  • 多条件查询的时候,就是要将数据过滤到最小,所以要将检索的字段顺序排好
  • 如果是分页的接口对外暴露,一定要控制分页的大小(50或者100)
  • 如果是在操作sql进行统计,是否可以异步? 建立专门统计表去处理,而不是每次查询都在sql中操作一遍
  • 如果查询的sql比较复,使用了group by等多个关键字,会创建出多个临时表,影响查询效率
  • 考虑数据库参数配置优化