Что означает использование буфера соединения (блочный вложенный L oop) с командой EXPLAIN mysql в столбце Extra? - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь оптимизировать мой запрос.

И получаю Использование буфера соединения (блочный вложенный L oop) для одной из таблиц с

EXPLAIN SELECT команда.

Понятия не имею, что это значит. Я попытался погуглить, но я не нашел объяснения.

1 Ответ

1 голос
/ 04 февраля 2020

Using join buffer (block nested loop) означает, что объединение не может использовать индекс, и оно выполняет сложный путь. Другими словами, он выполняет сканирование таблицы в объединенной таблице.

Оптимизатор предполагает, что в объединенной таблице может быть больше строк, поэтому он должен будет загружать строки в буфер в памяти в пакетах, затем сравните с этими строками в буфере, чтобы отфильтровать те, которые соответствуют условию соединения. Затем очистите буфер объединения, извлеките следующий блок строк и повторите попытку.

Если вы видите Using join buffer (block nested loop) в своем отчете EXPLAIN, вы должны выяснить, можете ли вы добавить индекс в объединенную таблицу, чтобы разрешить это искать соответствующие строки более эффективно. Это похоже на процесс определения наилучшего индекса для первой таблицы в вашем запросе.

...