Классика баз данных - статьи

       

в левой части таблицы относится


Оператор расщепления в левой части таблицы относится к просмотру отношения A на рис. 10, а в правой – к просмотру отношения B. В таблице кортежи разделены между тремя потоками данных.

Операция расщепления просмотра отношения A Операция расщепления просмотра отношения B
Предикат Назначенный процесс Предикат Назначенный процесс
"A-H" (ЦПУ #5, Процесс #3,Порт #0) "A-H" (ЦПУ #5, Процесс #3, Порт #1)
"A-H" (ЦПУ #5, Процесс #3,Порт #0) "A-H" (ЦПУ #5, Процесс #3, Порт #1)
"I-Q" (ЦПУ #7, Процесс #8, Порт #0) "I-Q" (ЦПУ #7, Процесс #8, Порт #1)
"R-Z" (ЦПУ #2, Процесс #2, Порт #0) "R-Z" (ЦПУ #2, Процесс #2, Порт #1)
insert into C select * from A, B where A.x = B.y;



Рисунок 10.

Простой SQL запрос и реляционный граф этого запроса. Запрос указывает, что необходимо произвести соединение отношения A и отношения B посредством сравнения атрибута x каждого кортежа из отношения A со значением атрибута y каждого кортежа из отношения B. Для каждой пары кортежей, удовлетворяющих заданному предикату, формируется новый кортеж со всеми атрибутами двух исходных кортежей. Полученный кортеж затем добавляется к формируемому отношению C. На логическом графе этого запроса (каким его может создать оптимизатор запроса) показаны три оператора – один для слияния, другой для вставки и третий для просмотра каждого входного отношения.

Поясним этот пример. Рассмотрим первый процесс соединения на рис. 11 (процессор 5, процесс 3, порты 0 и 1 в таблице 1). Он будет получать все кортежи отношения A в диапазоне "A-H" от трех операторов просмотра отношения A, слитые в единый поток в порту 0, и все кортежи отношения B в диапазоне "A-H", слитые в единый поток в порту 1. Затем процесс будет соединять эти кортежи, используя соединение с хэшированием, соединение методом вложенных циклов или даже соединение сортировкой-слиянием, если кортежи прибывают в нужном порядке.


Содержание  Назад  Вперед