使用连接缓冲区(块嵌套循环)对额外列中的 EXPLAIN mysql 命令意味着什么?

And*_*nko 8 mysql explain

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

并 为其中一个表获取使用连接缓冲区(块嵌套循环)

EXPLAIN SELECT 命令。

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

Bil*_*win 16

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

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

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

  • 好吧,事实证明这是一个已知的 mysql 错误,导致伪造的块嵌套循环:https://bugs.mysql.com/bug.php?id=69721 (2认同)