查询优化:SQL优化,关于连多表查询
查询优化:SQL优化
场景:当列表展示的数据来自很多表中的数据时,由于需要实现相关的查询条件,WHERE涉及到每张表时,需要用JOIN连接查询出相关数据(比如查询采购单数据:有采购单、采购单明细、入库数据、报损数据、取消数据、请款数据、采购合同、产品信息等等),JOIN连接查询也很方便地获取到要返回的数据,但是问题来了,这么多表查询起来关联的数据非常多,查询耗时很大,甚至超过30秒,影响用户体验,那么怎样查询加快响应速度是需要考虑的问题。
SQL优化方向:几点考虑,如下
- 子查询:有查询条件时才关联相关表拼接成子查询
- 当连表查询比较多时,通过子查询限制目标记录数,缩小查询范围
- 查询汇总数据可分开查询做异步查询,同时设置缓存
- 主查询用来展示数据;子查询限定查询范围,加快响应速度
分析:主查询如果不限定目标记录,则会关联所有表查询出目标数据,关联越多查询越慢;子查询查询条件较少,不用关联那么多表,查询出数据再限定主查询在子查询的结果集中查找数据(比如一般子查询按分页查询50条数据,那么主查询就是查找这50条数据),这样速度就相当于子查询的响应速度;
用子查询与非子查询的比较:
查询条件越少,用子查询效率越高,甚至快于非子查询几十倍;随着查询条件的增多(假设所有WHERE都用上),用子查询的效率就越接近非子查询,但是这种场景非常少,而且满足所有条件的数据也非常少,所以效率也是非常快的。
总结:使用子查询在多表关联查询的情况下有较大优势,主查询获取WEB页面需要展示的数据,子查询匹配目标记录数,两者结合起来可以实现不错的优化效果。
有不对的,或更好的、其他的方案,欢迎来信 ^v^
还没有评论,来说两句吧...