将联表查询简化为单表查询案例
目录
1、将联表查询简化为单表查询案例
1.1 问题描述
1.2 优化过程
1.2.1 将联表查询修改为单表查询
1.2.2 利用覆盖索引避免回表
1、将联表查询简化为单表查询案例
1.1 问题描述
统计商品sku表中总数量、上架数量、下架数量
SELECTcount(1) AS totalNum,sum(case WHEN sku.on_state = '1' THEN 1 ELSE 0 END) AS saleOnNum,sum(CASE WHEN sku.on_state = '0' THEN 1 ELSE 0 END) AS saleOffNumFROMpro_sku sku LEFT JOIN pro_spu spu ON sku.spu_id = spu.idwhere 1=1and spu.is_deleted = '0';
执行结果:耗时 5.6 s
开发日志监控:
执行计划如下:
1.2 优化过程
经过认真分析,发现实现同样的sql语义根本不需要进行pro_spu表、pro_sku表的联表查询,只需要对pro_sku表进行单表查询。
1.2.1 将联表查询修改为单表查询
对pro_sku表加一个字段,该字段是pro_spu表冗余到pro_spu表的的一个冗余字段,优化之后的sql如下:
SELECTcount(1) AS totalNum,sum(case WHEN sku.on_state = '1' THEN 1 ELSE 0 END) AS saleOnNum,sum(CASE WHEN sku.on_state = '0' THEN 1 ELSE 0 END) AS saleOffNumFROM pro_sku sku where sku.is_deleted = '0';
执行结果如下:耗时0.9 s
执行计划如下:
总结:
对单表进行全表扫描的效果比联表查询的效果要好得多,执行耗时只为原来sql语句执行时间的1/6。
1.2.2 利用覆盖索引避免回表
对索引spu_id进行修改,将单列索引修改为(spu_id,on_state)联合索引,因为select 子句中,只需要返回on_state字段,所以将单列索引修改为联合索引之后,查询不需要再进行回表。
执行结果如下:耗时3.6s
执行计划如下: Using Index提示不需要进行回表
将联表查询简化为单表查询案例相关推荐
- server多笔记录拼接字符串 sql_第四章、SQL Server数据库查询大全(单表查询、多表连接查询、嵌套查询、关联子查询、拼sql字符串的查询、交叉查询)...
4.1.查询的类型 declare @value as int set @value = 50 select 'age:'as age,2008 years,@valueas va --这种查询时跟 ...
- mysql单表查询实例_MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
- 笔记:3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)
对 3.2 数据查询-SELECT(单表查询.连接查询.嵌套查询.集合查询.多表查询)的转载与学习笔记: 0.前言 本篇文章是对<数据库系统概论>王珊老师主编的数据库查询SELECT部分做 ...
- 记录一次慢SQL优化:大表关联小表->拆解为单表查询
前言: 最近一段时间总是会收到数据库CPU报警 一查发现有一个特别慢的SQL,调用的频率很高,并且查一次SQL15s以上,十分影响性能 SQL分析 这个sql是一个分页查询的sql,每次查出10条主表 ...
- 快递单号发出物流如何查询,快递单号查询物流方法
当你有大批的快递单号,如何快速查询快递单号发出的物流信息呢?这里分享一个批量查询快递单号物流的方法,下面来看操作步骤. 准备一个查询工具,快递批量查询高手.在浏览器上搜索可下载到,先注册后再登录上. ...
- 3.4 《数据库系统概论》之数据查询---SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)
文章目录 0.前言 1.思维导图 2.Student/SC/Course表数据及结构 3.SELECT语句的一般格式 4.单表查询 (1)选择表中的若干列 ① 查询指定列 ② 查询全部列 ③ 查询经过 ...
- mysql左连接去重查询_mysql之单表查询、多表查询
mysql查询 单表查询 """ 增: insert [into] [数据库名.]表名[(字段1[,...,字段n])] values (数据1[,...,数据n])[, ...
- 【数据库系统原理作业】五、数据查询中的单表查询
上一次的作业: https://blog.csdn.net/qq_21331159/article/details/115165279 单表查询 一.选择表中的若干列 ①.查询指定列 ②.查询全部列 ...
- mysql怎么进行单表查询_MySQL之单表查询
一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键 ...
最新文章
- mysql 数据泵_Oracle 数据泵详解
- centos7上安装配置tomcat8.5
- 国内做事就要高调——财富人生:邹果庆:中国新蛋网总裁
- 阿里巴巴有一群全年无休从不领工资的高智商员工
- java包含点_Java的21个核心技术点,你知道吗
- mysql数据库存储数据的过程_[数据库]MySql存储过程总结
- 【机器学习基础】前置知识(二):30分钟掌握常用Jupyter Notebook用法
- 区域数据导入功能(OCUpload插件使用)
- 《自然》杂志:中国人越来越沉迷于对着一个叫“区块链”的东西胡言乱语
- LUN/PV/VG/LV
- IEBrowser IE升级工具 下载
- 30分钟掌握用Python写网络爬虫,入门到实战教程,黑客入门第一步
- TS - 勉强入个门儿
- 虚拟机安装的Ubuntu下载速度慢怎么办
- 机房动环监控系统方案
- Ubuntu的root
- mpeg1视频解码标准简介
- 单元测试|Unittest setup前置初始化和teardown后置操作
- SpringBoot通过自定义注解实现模板方法设计模式
- IDA调试修改内存数据