Spec-Zone .ru
спецификации, руководства, описания, API
|
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:
Первый сценарий используется для стандартных находящихся на диске механизмов
хранения такой как InnoDB
и
MyISAM
. Для этих механизмов
обычно ключи для всех строк от буфера соединения представляются интерфейсу MRR сразу. Специфичные для
механизма функции MRR выполняют, индексируют поиски для представленных ключей, получают ID строки (или
первичные ключи) от них, и затем выбирают строки для всех этих выбранных ID строки один за другим
запросом от алгоритма BKA. Каждая строка возвращается со ссылкой ассоциации, которая включает доступу к
соответствующей строке в буфере соединения. Строки выбираются функциями MRR оптимальным способом: Они
выбираются в ID строки (первичный ключ) порядок. Это улучшает производительность, потому что чтения
находятся в дисковом порядке, а не произвольном порядке.
Второй сценарий используется для удаленных механизмов хранения такой как NDB
. Пакет ключей для части строк от буфера соединения, вместе с их
ассоциациями, отправляется MySQL Server (узел SQL) к узлам данных MySQL Cluster. В свою очередь, узел
SQL получает пакет (или несколько пакетов) соответствия строк вместе с соответствующими ассоциациями.
Алгоритм соединения BKA берет эти строки и создает новые строки, к которым присоединяются. Затем новый
набор ключей отправляется узлам данных, и строки от возвращенных пакетов используются, чтобы создать
новые строки, к которым присоединяются. Процесс продолжается, пока последние ключи от буфера соединения
не отправляются узлам данных, и узел SQL получил и присоединился ко всем строкам, соответствующим эти
ключи. Это улучшает производительность, потому что меньше переносящих ключ пакетов, отправленных узлом
SQL узлам данных, означает меньше циклов обработки между нею и узлами данных выполнять работу
соединения.
С первым сценарием часть буфера соединения резервируется, чтобы сохранить ID строки (первичные ключи), выбранные, индексируют поиски и передал в качестве параметра к функциям MRR.
Нет никакого специального буфера, чтобы сохранить ключи, созданные для строк из буфера соединения. Вместо этого функцию, которая создает ключ для следующей строки в буфере, передают в качестве параметра к функциям MRR.
В EXPLAIN
вывод, использование BKA для таблицы показывается когда Extra
значение содержит Using join buffer (Batched Key
Access)
и type
значение ref
или eq_ref
.