问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一个在mysql中查询过慢的问题,我的查询语句是多表联合查询.语句写法如下.感觉不是很好.能否优化???

发布网友 发布时间:2022-04-08 06:21

我来回答

2个回答

热心网友 时间:2022-04-08 07:51

问题

我们有一个 SQL,用于找到没有主键 / 唯一键的表,但是在 MySQL 5.7 上运行特别慢,怎么办?


实验

我们搭建一个 MySQL 5.7 的环境,此处省略搭建步骤。

写个简单的脚本,制造一批带主键和不带主键的表:

执行一下脚本:

现在执行以下 SQL 看看效果:

...

执行了 16.80s,感觉是非常慢了。

现在用一下 DBA 三板斧,看看执行计划:

感觉有点惨,由于 information_schema.columns 是元数据表,没有必要的统计信息。

那我们来 show warnings 看看 MySQL 改写后的 SQL:

我们格式化一下 SQL:

可以看到 MySQL 将

select from A where A.x not in (select x from B) //非关联子查询

转换成了

select from A where not exists (select 1 from B where B.x = a.x) //关联子查询

如果我们自己是 MySQL,在执行非关联子查询时,可以使用很简单的策略:

select from A where A.x not in (select x from B where ...) //非关联子查询:1. 扫描 B 表中的所有记录,找到满足条件的记录,存放在临时表 C 中,建好索引2. 扫描 A 表中的记录,与临时表 C 中的记录进行比对,直接在索引里比对,

而关联子查询就需要循环迭代:

select from A where not exists (select 1 from B where B.x = a.x and ...) //关联子查询扫描 A 表的每一条记录 rA:     扫描 B 表,找到其中的第一条满足 rA 条件的记录。

显然,关联子查询的扫描成本会高于非关联子查询。

我们希望 MySQL 能先"缓存"子查询的结果(缓存这一步叫物化,MATERIALIZATION),但MySQL 认为不缓存更快,我们就需要给予 MySQL 一定指导。

...

可以看到执行时间变成了 0.67s。

整理

我们诊断的关键点如下:

\1. 对于 information_schema 中的元数据表,执行计划不能提供有效信息。

\2. 通过查看 MySQL 改写后的 SQL,我们猜测了优化器发生了误判。

\3. 我们增加了 hint,指导 MySQL 正确进行优化判断。

但目前我们的实验仅限于猜测,猜中了万事大吉,猜不中就无法做出好的诊断。

热心网友 时间:2022-04-08 09:09

我先简单的看了看, 你这里的 a1 实际上是一个子查询

我需要咨询一下. 你那里的 a2 到 a6 是否也是 子查询。
如果也是的话, 那估计效率是有点问题了。

那么再进一步的确认一下。
你的 a1 到 a6 的 子查询, 是否都查询一个 omdb.rt110celltrxrelatedoverviewcounters1 表。
也就是 a1 到 a6 的查询里面, 有没有 查询相同表的。

比如 a1 和 a2 查询的表一样。 a3和a4的也一样。 a5的和a6的一样。
如果有这种情况的话, 那么还是有可能进行优化调整的。

如果 a1 到 a6, 具体的表 彻底不同,那SQL上面,好像暂时就没什么办法了,只好尝试去创建一些索引了。追问a1是查询这个omdb.rt110celltrxrelatedoverviewcounters1 表.
a2到a6不是这个表.都是不同的表.

追答如果 a1 - a6 查询的都是不同的表。
那么你可以尝试 分别单独查询 a1 - a6 , 查看哪一个 速度最慢。
找到最慢的那个以后,再尝试优化那一个查询。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Linux系统安装FTP服务器 Linux系统的网络文件共享 建筑的七盏明灯的内容简介 面向对象设计七大原则 简单说 交互设计七大定律 交互设计的“根”——七大定律 交互设计原则和理论2——七大定律 七大设计原则 附近的加油站有哪些 附近的加油站有哪些地方 您好,我在手机上招商银行APP里面申请了一张电子卡二类,这张卡可以使用吗?还是需要到柜台办理? 二类银行卡有年费吗?注销银行卡可以异地吗? 招行开卡五问指的是哪五问 晚上可以把暖宝宝贴在被子里吗 男人贴暖宝宝贴哪里好 男的贴暖宝宝贴哪里 暖宝宝贴男人可以用吗 手机拼多多卸载后需要重新注册银行卡吗 现在市面上有什么耳机可以与KOSS PP 25周年那款耳机的低音效果? 求推荐一款 好推 低音浑厚的耳机 我想要那种低音效果好的,就是听起来特别沉厚的那种音乐的耳机!是哪款? 求推荐一个重低音浑厚的入耳式耳机 通俗说明什么是期货 什么是“期货”,要求解释的通俗易懂, 什么是期货???(说的通俗易懂点) 用通俗易懂的语言解释什么是期货。举个例子 简单的理解什么是期货…… 请用简单通俗的话,解释一下“期货” 御品家人的姜茶有什么功效? 冬季栀子花怎么修剪 在短期内办第2张招商银行储蓄卡收不收费用? 请问储蓄卡一类卡没银行卡该怎么销户?线上又申请了一张二类储蓄卡,一类卡销户之后二类卡收管理费吗? 如果有了一张工商银行的社保卡,再办一张工商银行的储蓄卡还能办理吗?会不会再收取小额管理费或者年费啊 空调不暖是什么问题? 空调制热模式下房间不暖 术后影响,恢复期多久 受伤后的恢复期有多久 割双眼皮后恢复的恢复期 面瘫恢复期是多少? 颅脑损伤恢复期多久? 关于肌肉恢复期的时间和饮食 怎么用英语翻译恢复期,康复期,恢复期,康复期用英语 感情创伤的恢复期有多长 脚踝骨折需要多长时间恢复?什么时间是最佳恢复期? 为什么金立手机都不支持OTG,NFC 金立手机哪些带有NFC这个功能? 小学一年级要画一幅传承家风的绘画作品 金立手机9010带有nfc功能吗? 晋升感言应该怎样说? 一年级以美为主题的绘画作品比赛