|
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, системные средства управления переменной присоединяются к организации буферизации данных. Для возможных значений этой переменной и их значений, см. описание в Разделе 5.1.4, "Системные Переменные Сервера".
В EXPLAIN вывод, использование BNL для таблицы показывается когда Extra значение содержит Using join buffer (Block Nested
Loop) и type значение ALL, index, или range.
Для получения информации о стратегиях полуобъединения см. Раздел 8.13.16.1, "Оптимизируя Подзапросы с Преобразованиями Полуобъединения"