Блокировать вложенный цикл
Блочно -вложенный цикл ( BNL ) — это алгоритм, используемый для соединения двух отношений в реляционной базе данных . [1]
Этот алгоритм [2] является разновидностью простого соединения вложенного цикла и объединяет два отношения и («внешний» и «внутренний» объединяют операнды соответственно). Предполагать . В традиционном соединении вложенного цикла: будет сканироваться один раз для кортежа каждого . Если есть много подходящих кортежей, особенно если нет подходящего индекса для ключа соединения на , эта операция будет очень дорогой.
Алгоритм соединения блочных вложенных циклов совершенствует простое соединение вложенных циклов за счет только сканирования один раз для группы каждой кортежи. Здесь группы представляют собой непересекающиеся множества кортежей в и объединение всех групп имеет те же кортежи, что и . Например, один из вариантов объединения вложенных циклов блоков считывает страницу всю кортежи в память и загружают их в хеш-таблицу . Затем он сканирует и исследует хэш-таблицу, чтобы найти кортежи, соответствующие любому из кортежей на текущей странице . Это уменьшает количество сканирований которые необходимы.
algorithm block_nested_loop_join is for each page pr in R do for each page ps in S do for each tuple r in pr do for each tuple s in ps do if r and s satisfy the join condition then yield tuple <r,s>
Более агрессивный вариант этого алгоритма загружает столько страниц столько, сколько может поместиться в доступной памяти, загружая все такие кортежи в хеш-таблицу, а затем многократно сканируя . Это еще больше сокращает количество сканирований которые необходимы. Фактически, этот алгоритм по сути является частным случаем классического алгоритма хэш-соединения . [ нужна ссылка ]
Вложенный цикл блоков выполняется Вводы/выводы, где — количество доступных страниц внутренней памяти и и размер и соответственно в страницах. Примечание в этом блоке выполняется вложенный цикл Вводы/выводы, если помещается в доступную внутреннюю память.
Ссылки
[ редактировать ]- ^ «8.2.1.14 Блокировка соединений вложенного цикла и пакетного доступа к ключам» . Справочное руководство по MySQL 5.6 . Корпорация Оракл . Проверено 2 августа 2015 г.
- ^ «Блокировать соединение вложенного цикла» . МарияДБ . Корпорация MariaDB Ab . Проверено 2 августа 2015 г.