mysql in()后子查询优化
线上数据发现一条数据大量等待的现象,通过explain发现这个sql写法存在问题,这里简单记录一下.
业务场景是这样:
存在购物车和费用两张表,购物车数据是购买商品时生成,用于记录购买商品数据,同时购买的商品也会生成费用表,用于统计商品总的支出情况(相当于订单),购物车和费用的关系是多对一,通过gg_gwc.fyxh=gg_fei.id关联.这里需要更新满足条件的购物车关联的fei的数据.
- 原始查询方式:
因为是测试环境,实际的执行时间并不长,但是gg_fei表发现虽然使用了id索引,但是查询条件却是全表查询,因为in条件中使用子查询会造成索引失效;
- 优化尝试方式
- 方式1:
这种方式实际的结果显示是失败的,因为它没有从根本上改变in(子查询)这种方式,它的想法是减少子查询的数据,来加速sql访问,单纯从这条sql来看,实际确实也有点作用,他将子查询8条限制为2条;但是第一条sql因为条件已经很精确,它实际的查询只有一条;
- 方式2:
这种方式是通过内连接查询实现,实际查询结果显示有效,它将gg_fei表查询数量降到了1条,gg_gwc也使用了索引,但是因为关联查询是一个子查询他会生成一个派生表(简化的临时表),这个派生表也会增加一次查询,虽然有效但是从表面上不是最优解.
- 方式3:
查资料有人说:from a,b where a.id=b.id 是内连接的简化方式,这种方式它成功的去除了子查询,inner join也可以写成这种方式,目前来看是这个几个方式里的最优解
mysql in()后子查询优化的更多相关文章
- MySQL中IN子查询会导致无法使用索引
今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表 ...
- MySQL实验 子查询优化双参数limit
MySQL实验 子查询优化双参数limit 没想到双参数limit还有优化的余地,为了亲眼见到,今天来亲自实验一下. 实验准备 使用MySQL官方的大数据库employees进行实验,导入该示例库 ...
- Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
参考书籍<mysql是怎样运行的> 非常推荐这本书,通俗易懂,但是没有讲mysql主从等内容 书中还讲解了本文没有提到的子查询优化内容, 本文只总结了常见的子查询是如何优化的 系列文章目录 ...
- 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...
- MySQL SQL语句分析查询优化
如何获取有性能问题的SQL 1.通过用户反馈获取存在性能问题的SQL 2.通过慢查询日志获取性能问题的SQL 3.实时获取存在性能问题的SQL 使用慢查询日志获取有性能问题的SQL 首先介绍下慢查询相 ...
- MySQL索引原理以及查询优化
转载自:https://www.cnblogs.com/bypp/p/7755307.html MySQL索引原理以及查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且 ...
- MySQL里面的子查询
一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任何子句,比如:dis ...
- mysql 索引原理及查询优化 -转载
转载自 mysql 索引原理及查询优化 https://www.cnblogs.com/panfb/p/8043681.html 潘红伟 mysql 索引原理及查询优化 一 介绍 为何要有索引? ...
- MySQL调优之查询优化
一.查询慢的原因 1.网络 (1)网络丢包,重传 这个比较容易理解.当SQL 从客户端发送到数据库,执行完毕,数据库将结果返回给客户端,这个将数据返回给客户端的过程本质是网络包传输.因为链路的不稳定性 ...
随机推荐
- linux 下 shell脚本报错:-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory
主要原因是build.sh是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的fo ...
- vue 解决ios编辑器输入框不能拉起
一.问题描述:Android .pc.下可以正常使用,在ios下可以拉起输入框但是无法输入 <div contenteditable="true" ></div& ...
- Go path/filepath文件路径操作
本文:https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter06/06.2.html path:htt ...
- EhLib使用全攻略
使用 TDBSumList 组件 还记得以前有朋友问过这样一个问题:在 DBGrid 下如何像 Excel 一样能够做统计计算,实话说,使用 DBGrid 来做的话着实不易,不过现在有了这个咚咚, ...
- IDEA中导入Maven模块
IDEA中导入Maven模块方式有二种: 1)批量添加,不可添加文件夹 2)单个添加,可添加任意文件
- c# 比较字符串
- 转载-企业环境下MySQL5.5调优
转载-企业环境下MySQL5.5调优 参照 腾讯云 和ucloud my.cnf 以及网上找的资料 整理出来的 my.cnf , 以后修改任何参数都会继续更新,目前是在测试阶段; 物理机 : ubun ...
- (Linux基础学习)第四章:Linux系统中的日期和时间介绍和ntpdate命令
第1节:日期和时间1.Linux的两种时钟:系统时钟:由Linux内核通过CPU的工作频率进行的硬件时钟:主板2.相关命令date 显示和设置系统时间hwclock,clock 显示硬件时钟-s,-- ...
- PHP openssl DES加解密
不说废话上代码 加密 $str_padded = 'android'; //要加密的字符串 $iv = "12345678"; 偏移值 cbc必填 "\x01\x02\x ...
- 个性化排序算法实践(五)——DCN算法
wide&deep在个性化排序算法中是影响力比较大的工作了.wide部分是手动特征交叉(负责memorization),deep部分利用mlp来实现高阶特征交叉(负责generalizatio ...