【问题标题】:What does Using join buffer (Block Nested Loop) mean with EXPLAIN mysql command in the Extra column?使用连接缓冲区(块嵌套循环)对 Extra 列中的 EXPLAIN mysql 命令意味着什么?
【发布时间】:2020-05-20 09:08:56
【问题描述】:

我正在尝试优化我的查询。

并获得使用连接缓冲区(块嵌套循环) 对于其中一张桌子

EXPLAIN SELECT 命令。

我不知道这是什么意思。 我尝试谷歌搜索,但我没有找到解释。

【问题讨论】:

标签: mysql explain


【解决方案1】:

Using join buffer (block nested loop) 表示连接无法使用索引,并且它正在以艰难的方式进行连接。换句话说,它正在对连接的表进行表扫描。

优化器假设连接表中可能有更多行,因此它必须将行分批加载到内存缓冲区中,然后与缓冲区中的这些行进行比较,以过滤那些与连接条件匹配的行。然后清空连接缓冲区,获取下一个行块,然后重试。

如果您在 EXPLAIN 报告中看到 Using join buffer (block nested loop),您应该确定是否可以向连接表添加索引,以使其更有效地查找匹配行。这与为查询中的第一个表找出最佳索引的过程类似。

【讨论】:

  • 但是,尽管在连接表中有一个索引用于 ON 条件中使用的列,但发生这种情况意味着什么?
  • 取决于连接条件。我建议您提出一个新问题,并确保显示您正在尝试优化的查询,以及该查询的EXPLAIN 的结果,以及查询中每个表的SHOW CREATE TABLE 的结果。
  • 好的,原来这是一个已知的 mysql 错误,导致虚假的块嵌套循环:bugs.mysql.com/bug.php?id=69721
猜你喜欢
  • 2020-07-12
  • 2016-03-26
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2017-02-13
  • 2012-03-17
  • 2013-01-17
  • 2013-10-19
相关资源
最近更新 更多