в левой части таблицы относится
Оператор расщепления в левой части таблицы относится к просмотру отношения 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. Затем процесс будет соединять эти кортежи, используя соединение с хэшированием, соединение методом вложенных циклов или даже соединение сортировкой-слиянием, если кортежи прибывают в нужном порядке.
Содержание Назад Вперед