Spec-Zone .ru
спецификации, руководства, описания, API

8.13.12.1. Присоединитесь к организации буферизации данных для Блочного Вложенного цикла и Пакетного Ключа AccessAlgorithms

В MySQL 5.7 MySQL Server может использовать буферы соединения, чтобы выполниться не, только внутренние объединения без индексируют доступ к внутренней таблице, но также и внешние объединения и полуобъединения, которые появляются после выравнивания подзапроса. Кроме того буфер соединения может эффективно использоваться, когда есть индексировать доступ к внутренней таблице.

Код организации буферизации данных соединения немного более эффективно использует пространство буфера соединения, храня значения интересных столбцов строки: Никакие дополнительные байты не выделяются в буферах для столбца строки, если его значение NULL, и минимальное число байтов выделяется для любого значения VARCHAR ввести.

Код поддерживает два типа буферов, регулярных и инкрементных. Предположите тот буфер соединения B1 используется к объединяющим таблицам t1 и t2 и к результату этой работы присоединяются с таблицей t3 использование буфера соединения B2:

Инкрементные буферы соединения являются всегда инкрементными относительно буфера соединения от более ранней работы соединения, таким образом, буфер от первой работы соединения всегда является регулярным буфером. В примере, только данном, буфер B1 привыкший к объединяющим таблицам t1 и t2 должен быть регулярный буфер.

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

Инкрементные буферы включают менее частому копированию столбцов от буферов, используемых для предыдущих операций соединения. Это обеспечивает сбережения в пространстве буфера, потому что в общем случае строка, произведенная первым операндом соединения, может быть соответствующей несколькими строками, произведенными вторым операндом соединения. Является ненужным сделать несколько копий строки от первого операнда. Инкрементные буферы также обеспечивают сбережения во время обработки из-за сокращения копирования времени.

block_nested_loop и batched_key_access флаги optimizer_switch системная переменная управляет, как оптимизатор использует Блочные алгоритмы соединения Вложенного цикла и Пакетного доступа по ключу. По умолчанию, block_nested_loop on и batched_key_access off. См. Раздел 8.8.5.2, "Управляя Переключаемой Оптимизацией".

Перед MySQL 5.6.3, optimizer_join_cache_level системные средства управления переменной присоединяются к организации буферизации данных. Для возможных значений этой переменной и их значений, см. описание в Разделе 5.1.4, "Системные Переменные Сервера".

Для получения информации о стратегиях полуобъединения см. Раздел 8.13.16.1, "Оптимизируя Подзапросы с Преобразованиями Полуобъединения"