查询优化:SQL优化,关于连多表查询

Myth丶恋晨 2021-11-10 01:20 572阅读 0赞

查询优化:SQL优化

场景:当列表展示的数据来自很多表中的数据时,由于需要实现相关的查询条件,WHERE涉及到每张表时,需要用JOIN连接查询出相关数据(比如查询采购单数据:有采购单、采购单明细、入库数据、报损数据、取消数据、请款数据、采购合同、产品信息等等),JOIN连接查询也很方便地获取到要返回的数据,但是问题来了,这么多表查询起来关联的数据非常多,查询耗时很大,甚至超过30秒,影响用户体验,那么怎样查询加快响应速度是需要考虑的问题。

SQL优化方向:几点考虑,如下

  • 子查询:有查询条件时才关联相关表拼接成子查询
  • 当连表查询比较多时,通过子查询限制目标记录数,缩小查询范围
  • 查询汇总数据可分开查询做异步查询,同时设置缓存
  • 主查询用来展示数据;子查询限定查询范围,加快响应速度

分析:主查询如果不限定目标记录,则会关联所有表查询出目标数据,关联越多查询越慢;子查询查询条件较少,不用关联那么多表,查询出数据再限定主查询在子查询的结果集中查找数据(比如一般子查询按分页查询50条数据,那么主查询就是查找这50条数据),这样速度就相当于子查询的响应速度;

用子查询与非子查询的比较:

查询条件越少,用子查询效率越高,甚至快于非子查询几十倍;随着查询条件的增多(假设所有WHERE都用上),用子查询的效率就越接近非子查询,但是这种场景非常少,而且满足所有条件的数据也非常少,所以效率也是非常快的。

总结:使用子查询在多表关联查询的情况下有较大优势,主查询获取WEB页面需要展示的数据,子查询匹配目标记录数,两者结合起来可以实现不错的优化效果。

有不对的,或更好的、其他的方案,欢迎来信 ^v^

发表评论

表情:
评论列表 (有 0 条评论,572人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL查询优化

    怎样使用Mysqlcheck来检查和修复,优化表的详解 首页>mysql教程>正文 怎样使用Mysqlcheck来检查和修复,优化表的详解 作者:PHP中文网|标签:

    相关 SQL查询优化

    目录 一、获取有性能问题SQL的三种方法 二、慢查询日志介绍     1、使用慢查询日志获取有性能问题的SQL 三、慢查询日志实例 四、实时获取性能问题 五、SQL

    相关 关于查询SQL优化的思路

    .如何获取有性能问题的SQL     通过用户反馈获取存在性能问题的SQL     通过慢查日志获取存在性能问题的SQL     实时获取存在性能问题的SQL 2...