mysql的一个bug Block Nested Loop
2019独角兽企业重金招聘Python工程师标准>>>
版本 5.7.20-19-log
mysql 官网bug https://bugs.mysql.com/bug.php?id=69721
主库和从库配置一样,但是执行计划不一样。
sql
SELECT ORD.*, INFO.NAME AS SHOPNAME, INFO.CONTACT_PHONE AS SHOPPHONE, IF(SS.ID IS NULL, 0, 0)AS REFUNDSTATUS
FROM SHOP_ORDER_INFO ORD
LEFT JOIN SHOP_INFO INFO ON INFO.ID=ORD.SHOP_ID
LEFT JOIN(SELECT ID, ORDER_ID FROM SHOP_ORDER_AFTER_SALES
WHERE STATUS='REFUND_SUCCESS' GROUP BY ORDER_ID)SS ON ORD.ID=SS.ORDER_ID
WHERE ORD.DEL_FLAG='0'
ORDER BY ORD.CREATE_DATE DESC
limit 0,10
主库执行计划
1 PRIMARY ORD ALL 36547 10 Using where; Using temporary; Using filesort
1 PRIMARY INFO eq_ref PRIMARY PRIMARY 194 fengdai_shop.ORD.shop_id 1 100
1 PRIMARY <derived2> ALL 3 100 Using where; Using join buffer (Block Nested Loop)
2 DERIVED SHOP_ORDER_AFTER_SALES index idx_order_id idx_order_id 195 36 10 Using where
从库执行计划
1 PRIMARY ORD ALL 43970 10 Using where; Using filesort
1 PRIMARY INFO eq_ref PRIMARY PRIMARY 194 fengdai_shop.ORD.shop_id 1 100
1 PRIMARY <derived2> ref <auto_key0> <auto_key0> 195 fengdai_shop.ORD.id 3 100
2 DERIVED SHOP_ORDER_AFTER_SALES index idx_order_id idx_order_id 195 368 10 Using where
主库比从库慢了5倍
执行器的选择有问题 明明派生表生成索引速度更快,但是主库选择了Block Nested Loop算法。
解决方法:
1 sql换一种方式
2 当前会话把这种算法关掉
SET SESSION optimizer_switch ='block_nested_loop=off';
select @@optimizer_switch;
转载于:https://my.oschina.net/zhuzhenyu/blog/2873684
mysql的一个bug Block Nested Loop相关推荐
- mysql优化之 Using where; Using join buffer (Block Nested Loop) ,索引失效,检查项
mysql优化检查项 1. 查看表是否创建了字段索引 show index from tblname 建立索引的方法 CREATE INDEX 索引名称 USING BTREE ON 表名(字段名); ...
- 关于MySQL count(distinct) 逻辑的另一个bug
背景 上一篇博文(链接)介绍了count distinct的一个bug.解决完以后发现客户的SQL语句仍然返回错误结果(0), 再查原因,发现了另外一个bug.也就是说,这个SQL语 ...
- Nested Loop Join入门
Nested Loop Join 之间的表关联是使用索引进行匹配的,假设表 R 和 S 进行连接,其算法伪代码大致如下: for each row r in R with matching condi ...
- HASH JOIN ,MERGE JOIN ,NESTED LOOP用法效率比较
概述: NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不 ...
- Hash join 和nested loop
Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer).目前 ...
- oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念
Nested loop join:
Outer - phpStudy...
浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...
- 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN
表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...
- 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...
- mycat1.5~1.6的一个bug
以下语句在mysql单库中执行正常: SELECT * FROM device WHERE devicetype='AMS.Monitoring.XlCloud.QKL8154.XLCloudDevi ...
最新文章
- 某指令引用的内存不能为
- python web 服务器实时监控 websocket_python websocket网页实时显示远程服务器日志信息...
- php 命令链模式,设计模式之------命令链模式
- 第七届蓝桥杯省赛---蚂蚁感冒
- URL传Base64 造成报错 Illegal base64 character 20
- tmpfs 文件系统介绍
- jquery时期到计时插件
- codeblocks中文编码问题
- 教你大数据必修三大技能 快快记录下来
- jquery 获取元素css的left,top值
- java ioutils_关于Java:无法解析符号“ IOUtils”
- echarts 弹出放大_vue中使用v-chart时放大缩小屏幕,echarts图自适应
- python算方差_python计算方差
- 20190131-JS - Promise使用详解--摘抄笔记
- 化工过程开发与工程思维
- 如何使用 Victoria 检测并修复硬盘坏道和坏扇区
- 番外篇:STM32之GPIO口速率配置究竟代表什么
- 【圣诞来了】3分钟教你用java画一颗彩色圣诞树,送给别人作为圣诞礼物吧
- SIMPLIS仿真软件2.2-SIMPLIS快速入门2
- 芝加哥大学计算机科学硕士录取,芝加哥大学计算机科学硕士录取要求