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

8.13.12.3. Соединения Пакетного доступа по ключу

MySQL 5.6.3 реализует метод присоединяющихся таблиц, названных Пакетным доступом по ключу (BKA) алгоритм соединения. BKA может быть применена, когда есть индексировать доступ к таблице, произведенной вторым операндом соединения. Как алгоритм соединения BNL, алгоритм соединения BKA использует буфер соединения, чтобы накопить интересные столбцы строк, произведенных первым операндом работы соединения. Затем алгоритм BKA создает ключи, чтобы получить доступ к таблице, к которой присоединятся для всех строк в буфере, и утверждает, что эти ключи в пакете к механизму базы данных для индексируют поиски. Ключи представляются механизму посредством Многодиапазонного Чтения (MRR) интерфейс (см. Раздел 8.13.11, "Многодиапазонная Оптимизация Чтения"). После представления ключей функции механизма MRR выполняют поиски в индексировании оптимальным способом, выбирая строки объединяемой таблицы, найденной этими ключами, и начинает подавать алгоритм соединения BKA с соответствием строк. Каждая строка соответствия вместе со ссылкой на строку в буфере соединения.

Для BKA, которая будет использоваться, batched_key_access флаг optimizer_switch системная переменная должна быть установлена в on. BKA использует MRR, таким образом, mrr флаг должен также быть on. В настоящий момент оценка стоимости для MRR слишком пессимистична. Следовательно, это также необходимо для mrr_cost_based быть off для BKA, которая будет использоваться. Следующая установка включает BKA:

mysql> SET
        optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on';

Есть два сценария, которыми выполняются функции MRR:

С первым сценарием часть буфера соединения резервируется, чтобы сохранить ID строки (первичные ключи), выбранные, индексируют поиски и передал в качестве параметра к функциям MRR.

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

В EXPLAIN вывод, использование BKA для таблицы показывается когда Extra значение содержит Using join buffer (Batched Key Access) и type значение ref или eq_ref.