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相关推荐

  1. mysql优化之 Using where; Using join buffer (Block Nested Loop) ,索引失效,检查项

    mysql优化检查项 1. 查看表是否创建了字段索引 show index from tblname 建立索引的方法 CREATE INDEX 索引名称 USING BTREE ON 表名(字段名); ...

  2. 关于MySQL count(distinct) 逻辑的另一个bug

    背景          上一篇博文(链接)介绍了count distinct的一个bug.解决完以后发现客户的SQL语句仍然返回错误结果(0), 再查原因,发现了另外一个bug.也就是说,这个SQL语 ...

  3. Nested Loop Join入门

    Nested Loop Join 之间的表关联是使用索引进行匹配的,假设表 R 和 S 进行连接,其算法伪代码大致如下: for each row r in R with matching condi ...

  4. HASH JOIN ,MERGE JOIN ,NESTED LOOP用法效率比较

    概述: NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不 ...

  5. Hash join 和nested loop

    Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer).目前 ...

  6. oracle hash join outer,CSS_浅谈Oracle中的三种Join方法,基本概念 Nested loop join: Outer - phpStudy...

    浅谈Oracle中的三种Join方法 基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort mer ...

  7. 表的连接方式:NESTED LOOP、HASH JOIN、SORT MERGE JOIN

    表连接方式及使用场合 NESTED LOOP 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择.nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查 ...

  8. 多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP

    在多表联合查询的时候,如果我们查看它的执行计划,就会发现里面有多表之间的连接方式. 之前打算在sqlplus中用执行计划的,但是格式看起来有点乱,就用Toad 做了3个截图. 从3张图里我们看到了几点 ...

  9. mycat1.5~1.6的一个bug

    以下语句在mysql单库中执行正常: SELECT * FROM device WHERE devicetype='AMS.Monitoring.XlCloud.QKL8154.XLCloudDevi ...

最新文章

  1. 某指令引用的内存不能为
  2. python web 服务器实时监控 websocket_python websocket网页实时显示远程服务器日志信息...
  3. php 命令链模式,设计模式之------命令链模式
  4. 第七届蓝桥杯省赛---蚂蚁感冒
  5. URL传Base64 造成报错 Illegal base64 character 20
  6. tmpfs 文件系统介绍
  7. jquery时期到计时插件
  8. codeblocks中文编码问题
  9. 教你大数据必修三大技能 快快记录下来
  10. jquery 获取元素css的left,top值
  11. java ioutils_关于Java:无法解析符号“ IOUtils”
  12. echarts 弹出放大_vue中使用v-chart时放大缩小屏幕,echarts图自适应
  13. python算方差_python计算方差
  14. 20190131-JS - Promise使用详解--摘抄笔记
  15. 化工过程开发与工程思维
  16. 如何使用 Victoria 检测并修复硬盘坏道和坏扇区
  17. 番外篇:STM32之GPIO口速率配置究竟代表什么
  18. 【圣诞来了】3分钟教你用java画一颗彩色圣诞树,送给别人作为圣诞礼物吧
  19. SIMPLIS仿真软件2.2-SIMPLIS快速入门2
  20. 芝加哥大学计算机科学硕士录取,芝加哥大学计算机科学硕士录取要求

热门文章

  1. 微信小程序-04-详解介绍.json 配置文件
  2. manjaro安装teamviewer实现远程连接
  3. centos7下 vsftpd初使用
  4. ASP.NET 数据绑定控件(转)
  5. 流程管理产品小故事汇总贴
  6. cmd.exe命令行方式执行matlab代码 【转】
  7. matlab gui七种参数传递方式和范围
  8. 最优秀的ajax框架 --转
  9. TP5 实现多字段的关键词模糊查询
  10. Windows PE导出表编程2(重组导出表函数地址)