本专栏用于与记录本人(新人程序员)遇到的有学习意义的问题及总结
总结:
sql优化思路优先考虑索引
1、创建临时表的同时也意味着原表索引失效,当临时表很大的时候将非常影响效率。
2、可以将经常使用到的字段创建为索引。
3、虽然子查询会影响效率,但和索引相比微乎其微,比如这次优化的sql有很多很多子查询
,但不是影响效率的主要因素
问题:优化一个查询效率非常低的sql,查询需要300秒。sql特点:比较长(几百行)、有很多子查询
结果:优化至2秒内(可见索引的重要性)
开始优化的思路是考虑如何将子查询优化,最后发现效率提升微乎其微。然后才转变为正确的思路:从索引下手。
【1】首先,该sql有三个临时表,其中两个临时表数据量很大(十万级),临时表没有索引!优化思路就很明显:舍弃临时表,在使用临时表的地方写等价sql。这是查询时间已经到了52秒左右
【2】其次,通过观察sql发现有一个表的一个字段经常被使用,且经常被用于group by ,然后查询数据库发现该字段没有索引,遂加上。这时怎么查询时间已经降低至1~2秒了,其实还有可以优化的地方。
【3】观察到该sql用于页面展示,但是系统组件做分页查询到逻辑是将数据全部查出再进行分页操作,可以自定义方法,写分页查询,只查询需要的数据。
至此,优化完毕