Spec-Zone .ru
спецификации, руководства, описания, API
|
В MySQL 5.7 исходная реализация алгоритма BNL расширяется, чтобы поддерживать операции полуобъединения и внешнее объединение.
Когда эти операции выполняются с буфером соединения, каждая строка, помещенная в буфер, предоставляется флагом соответствия.
Если работа внешнего объединения выполняется, используя буфер соединения, каждая строка таблицы, произведенной
вторым операндом, проверяется на соответствие против каждой строки в буфере соединения. Когда соответствие
находится, новая расширенная строка формируется (исходная строка плюс столбцы от второго операнда) и посылается
дальнейшие расширения остающимися операциями соединения. Кроме того, флаг соответствия соответствующей строки в
буфере включается. После того, как все строки таблицы, к которой присоединятся, были исследованы, буфер
соединения сканируется. Каждая строка от буфера, которому не включали его флагу соответствия, расширяется NULL
дополнения (NULL
значения для каждого столбца
во втором операнде), и посылал за дальнейшими расширениями остающимися операциями соединения.
С MySQL 5.6.3, block_nested_loop
флаг optimizer_switch
системная переменная управляет, как оптимизатор использует
Блочный алгоритм Вложенного цикла. По умолчанию, block_nested_loop
on
. См. Раздел 8.8.5.2,
"Управляя Переключаемой Оптимизацией".
Перед MySQL 5.6.3, optimizer_join_cache_level
В EXPLAIN
вывод, использование BNL для таблицы показывается когда Extra
значение содержит Using join buffer (Block Nested
Loop)
и type
значение ALL
, index
, или range
.
Для получения информации о стратегиях полуобъединения см. Раздел 8.13.16.1, "Оптимизируя Подзапросы с Преобразованиями Полуобъединения"