查询优化:SQL优化

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

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

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

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

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

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

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

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

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

  1. sql 多表多行模糊查询_从零开始学习SQL(五)多表查询

    经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...

  2. java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】...

    第1章 Mybatis 连接池与事务深入 1.1 Mybatis 的连接池技术 1.1.1 Mybatis 连接池的分类 1.1.2 Mybatis 中数据源的配置 1.1.3 Mybatis 中 D ...

  3. 数据库标准语言SQL(六)——单表查询(二)

    数据库标准语言SQL(五)--查询(二) 一.前言 这一次内容继续是单表查询的部分,然后单表查询就结束了. 二.示例 1.用值表确定集合查询 引入谓词IN 查找属性值属于指定集合的元组,可以让我们在查 ...

  4. SQL图文讲解操作12-多表查询

    |版权声明:本文为博主原创文章,未经博主允许不得转载.转载请附上原链接,博客地址:https://blog.csdn.net/sgsgy5 ## 1.1 目标 理解多表查询 理解子查询 能够创建视图 ...

  5. SQL sever数据库的单表查询和连接查询

    数据库的单表查询和连接查询 一.目的: 掌握无条件查询的使用方法. 掌握条件查询的使用方法. 掌握库函数及汇总查询的使用方法. 掌握分组查询的使用方法. 掌握查询的排序方法. 掌握连接查询的使用方法. ...

  6. SQL插入数据时连表查询(利用子查询一次性 insert 多条数据)

    标准说明: INSERT 语句中的 SELECT 子查询可用于将一个或多个表或视图中的值添加到另一个表中.使用 SELECT 子查询还可以同时插入多行. INSERT INTO 表名 as a (a. ...

  7. SQL Server 数据库之单表查询

    单表查询 1. 概述 2. 单表查询命令 2. 无条件查询与条件查询 2.1 无条件查询 2.2 条件查询 3. 聚集函数 4. 分组查询 5. 排序查询 1. 概述 单表查询是只对一个数据表进行查询 ...

  8. SQL外键约束多表查询级联删除子查询

    文章目录 一.外键 1.创建外键约束 2.删除外键约束 3.外键约束提示 二.级联删除 三.多表查询 1.笛卡尔积 2.内连接查询 1.隐式内连接 2.显示内连接 3.外连接查询 1.左外连接 2.右 ...

  9. SQL优化(二)-- 慢查询

    1.慢查询日志 MYSQL的慢查询日志是Mysql提供的一种日志记录方式,它主要是用来记录mysql执行语句过程中,响应时间超过阀值的语句,这个阀值可以通过long_query_time去指定,比如说 ...

  10. SQL优化:从设计表结构开始(层次型表结构设计方法)

    在业务中,经常会涉及到 数据本身是自关联的情况,比如,组织架构数据,每个人都会有一个上级,那么就是 id,parent_id 这样的设计. 但是这么设计之后,如果我要查询某个人的所有下级,就要用递归查 ...

最新文章

  1. 广泛的信号处理链如何让语音助理“正常工作”
  2. 如何编写一个测试HIDL接口的vts(gtest)的testcase
  3. MyBatis 架构分层与模块划分
  4. sklearn自学指南(part29)--高斯混合模型
  5. Linux下WPS自主设置快捷键,电脑wps的word怎么自主设定快捷键
  6. React之props基本使用
  7. android sqlite 数据库中使用的类型
  8. SQL DateTime数据类型注意事项和限制
  9. Windows 7 又惹祸了!
  10. One-Pass Multi-task Convolutional Neural Networks for Efficient Brain Tumor Segmentation
  11. (PPT素材)扁平图标、PNG免抠图小图片
  12. 除了被动阅读,用户想要的更多
  13. 7个示例科普CPU CACHE(zz)
  14. 全球130多个国家的货币代码对照表
  15. android dex2oat 编译,dex2oat代码阅读笔记
  16. oracle adpatch 回退,Oracle EBS施用adpatch工具打patch过程
  17. 港股交易最大手数是如何规定的?
  18. html td 超链接,web开发---给td添加超链接
  19. 云产品测试软件,云测试工具平台介绍
  20. 矩阵顺逆时针旋转、翻转 java

热门文章

  1. git/码云+npm语法
  2. 【转】国人须知道的76个常识
  3. 逻辑代数的基本公式和常用公式基本定理
  4. Mysql数据库简要介绍
  5. <sub>和<sup>标签
  6. 计算机负数的绝对值,负数的绝对值是什么
  7. centos中nginx使用
  8. C# Base64转换
  9. html web 表单
  10. 机器学习 -- 《机器学习》(周志华) 第三章