查询优化:SQL优化,关于连多表查询
查询优化:SQL优化
场景:当列表展示的数据来自很多表中的数据时,由于需要实现相关的查询条件,WHERE涉及到每张表时,需要用JOIN连接查询出相关数据(比如查询采购单数据:有采购单、采购单明细、入库数据、报损数据、取消数据、请款数据、采购合同、产品信息等等),JOIN连接查询也很方便地获取到要返回的数据,但是问题来了,这么多表查询起来关联的数据非常多,查询耗时很大,甚至超过30秒,影响用户体验,那么怎样查询加快响应速度是需要考虑的问题。
SQL优化方向:几点考虑,如下
- 子查询:有查询条件时才关联相关表拼接成子查询
- 当连表查询比较多时,通过子查询限制目标记录数,缩小查询范围
- 查询汇总数据可分开查询做异步查询,同时设置缓存
- 主查询用来展示数据;子查询限定查询范围,加快响应速度
分析:主查询如果不限定目标记录,则会关联所有表查询出目标数据,关联越多查询越慢;子查询查询条件较少,不用关联那么多表,查询出数据再限定主查询在子查询的结果集中查找数据(比如一般子查询按分页查询50条数据,那么主查询就是查找这50条数据),这样速度就相当于子查询的响应速度;
用子查询与非子查询的比较:
查询条件越少,用子查询效率越高,甚至快于非子查询几十倍;随着查询条件的增多(假设所有WHERE都用上),用子查询的效率就越接近非子查询,但是这种场景非常少,而且满足所有条件的数据也非常少,所以效率也是非常快的。
总结:使用子查询在多表关联查询的情况下有较大优势,主查询获取WEB页面需要展示的数据,子查询匹配目标记录数,两者结合起来可以实现不错的优化效果。
有不对的,或更好的、其他的方案,欢迎来信 ^v^
查询优化:SQL优化,关于连多表查询相关推荐
- sql 多表多行模糊查询_从零开始学习SQL(五)多表查询
经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...
- 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 ...
- 数据库标准语言SQL(六)——单表查询(二)
数据库标准语言SQL(五)--查询(二) 一.前言 这一次内容继续是单表查询的部分,然后单表查询就结束了. 二.示例 1.用值表确定集合查询 引入谓词IN 查找属性值属于指定集合的元组,可以让我们在查 ...
- SQL图文讲解操作12-多表查询
|版权声明:本文为博主原创文章,未经博主允许不得转载.转载请附上原链接,博客地址:https://blog.csdn.net/sgsgy5 ## 1.1 目标 理解多表查询 理解子查询 能够创建视图 ...
- SQL sever数据库的单表查询和连接查询
数据库的单表查询和连接查询 一.目的: 掌握无条件查询的使用方法. 掌握条件查询的使用方法. 掌握库函数及汇总查询的使用方法. 掌握分组查询的使用方法. 掌握查询的排序方法. 掌握连接查询的使用方法. ...
- SQL插入数据时连表查询(利用子查询一次性 insert 多条数据)
标准说明: INSERT 语句中的 SELECT 子查询可用于将一个或多个表或视图中的值添加到另一个表中.使用 SELECT 子查询还可以同时插入多行. INSERT INTO 表名 as a (a. ...
- SQL Server 数据库之单表查询
单表查询 1. 概述 2. 单表查询命令 2. 无条件查询与条件查询 2.1 无条件查询 2.2 条件查询 3. 聚集函数 4. 分组查询 5. 排序查询 1. 概述 单表查询是只对一个数据表进行查询 ...
- SQL外键约束多表查询级联删除子查询
文章目录 一.外键 1.创建外键约束 2.删除外键约束 3.外键约束提示 二.级联删除 三.多表查询 1.笛卡尔积 2.内连接查询 1.隐式内连接 2.显示内连接 3.外连接查询 1.左外连接 2.右 ...
- SQL优化(二)-- 慢查询
1.慢查询日志 MYSQL的慢查询日志是Mysql提供的一种日志记录方式,它主要是用来记录mysql执行语句过程中,响应时间超过阀值的语句,这个阀值可以通过long_query_time去指定,比如说 ...
- SQL优化:从设计表结构开始(层次型表结构设计方法)
在业务中,经常会涉及到 数据本身是自关联的情况,比如,组织架构数据,每个人都会有一个上级,那么就是 id,parent_id 这样的设计. 但是这么设计之后,如果我要查询某个人的所有下级,就要用递归查 ...
最新文章
- 广泛的信号处理链如何让语音助理“正常工作”
- 如何编写一个测试HIDL接口的vts(gtest)的testcase
- MyBatis 架构分层与模块划分
- sklearn自学指南(part29)--高斯混合模型
- Linux下WPS自主设置快捷键,电脑wps的word怎么自主设定快捷键
- React之props基本使用
- android sqlite 数据库中使用的类型
- SQL DateTime数据类型注意事项和限制
- Windows 7 又惹祸了!
- One-Pass Multi-task Convolutional Neural Networks for Efficient Brain Tumor Segmentation
- (PPT素材)扁平图标、PNG免抠图小图片
- 除了被动阅读,用户想要的更多
- 7个示例科普CPU CACHE(zz)
- 全球130多个国家的货币代码对照表
- android dex2oat 编译,dex2oat代码阅读笔记
- oracle adpatch 回退,Oracle EBS施用adpatch工具打patch过程
- 港股交易最大手数是如何规定的?
- html td 超链接,web开发---给td添加超链接
- 云产品测试软件,云测试工具平台介绍
- 矩阵顺逆时针旋转、翻转 java