Spec-Zone .ru
спецификации, руководства, описания, API
|
В MySQL 5.7 MySQL Server может использовать буферы соединения, чтобы выполниться не, только внутренние объединения без индексируют доступ к внутренней таблице, но также и внешние объединения и полуобъединения, которые появляются после выравнивания подзапроса. Кроме того буфер соединения может эффективно использоваться, когда есть индексировать доступ к внутренней таблице.
Код организации буферизации данных соединения немного более эффективно использует пространство буфера
соединения, храня значения интересных столбцов строки: Никакие дополнительные байты не выделяются в буферах для
столбца строки, если его значение NULL
, и минимальное число байтов выделяется для
любого значения VARCHAR
ввести.
Код поддерживает два типа буферов, регулярных и инкрементных. Предположите тот буфер соединения B1
используется к объединяющим таблицам t1
и t2
и к результату этой работы присоединяются с таблицей t3
использование буфера соединения B2
:
Регулярный буфер соединения содержит столбцы от каждого операнда соединения. Если
B2
регулярный буфер соединения, каждая строка r
помещенный в B2
составляется из столбцов строки r1
от B1
и интересные столбцы соответствующей строки r2
от таблицы t2
.
Инкрементный буфер соединения содержит только столбцы от строк таблицы,
произведенной вторым операндом соединения. Таким образом, это является инкрементным к строке от первого
буфера операнда. Если B2
инкрементный буфер соединения, он содержит
интересные столбцы строки r2
вместе со ссылкой к строке r1
от B1
.
Инкрементные буферы соединения являются всегда инкрементными относительно буфера соединения от более ранней
работы соединения, таким образом, буфер от первой работы соединения всегда является регулярным буфером. В
примере, только данном, буфер 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
Для получения информации о стратегиях полуобъединения см. Раздел 8.13.16.1, "Оптимизируя Подзапросы с Преобразованиями Полуобъединения"