Using join buffer (Block Nested Loop) 在 Extra 列中使用 EXPLAIN mysql 命令意味着什么?

What does Using join buffer (Block Nested Loop) mean with EXPLAIN mysql command in the Extra column?

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

并获取使用连接缓冲区(块嵌套循环) 对于 table 和

之一

EXPLAIN SELECT 命令。

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

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

进行 table-扫描

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

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

我 运行 在 MySQL 5.6 中也遇到了同样的问题。

经过大量试验和错误后,我 运行 OPTIMIZE TABLE 对 table 的查询,这为我解决了问题.