:: Не фоксом единым
Oracle. Выборка по дблинку
Pekpytep
Автор

Сообщений: 727
Откуда: Луганск
Дата регистрации: 19.10.2010
Всем привет.
Есть необходимость со стороны БД Оракл сделать выборку с соединением нескольких таблиц из внешней БД (MySQL). Правильно ли я понимаю, что по умолчанию запрос будет выполнен на стороне оракл, при этом таблицы будут предварительно выбраны и только после этого проджойнены? Насколько я понимаю, единственным способом управления, на какой стороне будет выполнен запрос является хинт /*+ driving_site */ ? Как проверить на какой стороне реально выполняется запрос?
Спасибо.

p.s.
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2000 | 3257K| 1000 (0)| 00:00:19 | | |
|* 1 | HASH JOIN RIGHT OUTER | | 2000 | 3257K| 1000 (0)| 00:00:19 | | |
| 2 | REMOTE | ENUMERATIONVALUES | 2000 | 527K| 200 (0)| 00:00:04 | MYSQL | R->S |
|* 3 | HASH JOIN RIGHT OUTER | | 2000 | 2730K| 800 (0)| 00:00:15 | | |
| 4 | REMOTE | ENUMERATIONVALUES | 2000 | 527K| 200 (0)| 00:00:04 | MYSQL | R->S |
|* 5 | HASH JOIN | | 2000 | 2203K| 600 (0)| 00:00:11 | | |
| 6 | REMOTE | ENUMERATIONVALUES | 2000 | 527K| 200 (0)| 00:00:04 | MYSQL | R->S |
|* 7 | HASH JOIN RIGHT OUTER| | 2000 | 1675K| 400 (0)| 00:00:08 | | |
| 8 | REMOTE | FISCALPAYMENT | 2000 | 603K| 200 (0)| 00:00:04 | MYSQL | R->S |
| 9 | REMOTE | FISCALRECEIPT | 2000 | 1072K| 200 (0)| 00:00:04 | MYSQL | R->S |
--------------------------------------------------------------------------------------------------------------

Правильно ли я понимаю, что данный план запроса демонстрирует как раз выполнение на стороне Оракл?



Исправлено 1 раз(а). Последнее : Pekpytep, 13.03.19 12:57
Ratings: 0 negative/0 positive
Re: Oracle. Выборка по дблинку
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет, хинт driving_site не единственный способ управления тем где исполнится определённая часть запроса. К примеру факторизованные запросы (WITH ...) с хинтом no_merge, или использование представлений во "внешней" БД может "переносить" часть работы в эту самую внешнюю БД.
Да, в плане операция REMOTE это "пересылка" данных из внешнего истончика в наш инстанс.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle. Выборка по дблинку
Pekpytep
Автор

Сообщений: 727
Откуда: Луганск
Дата регистрации: 19.10.2010
Да, спасибо, уже более глубоко копнул форумы, более или менее понял что к чему. В официальной документации не удалось ничего найти, как и в доках по mysql-коннектору.
Использование представлений снаружи решило бы проблему, с самого начала пытался продвинуть этот подход, но к сожалению команда коллег на mysql тугая, изо-всех сил сопротивляются и саботирует создание любых объектов для внешних систем.
Насколько я понял, заставить запрос выполняться снаружи довольно непростая задача, особенно если есть ряд условий накладывающих ограничения. Например, если в запросе более 1 дблинка, запрос выполнится на стороне оракла. Если в запросе участвует локальная таблица, запрос выполнится на стороне оракла. Если результат нужно вставить в таблицу - результат выполнится на стороне оракла. Т.е. конструкцию вида insert into agg_table select ... from ...remotetable@dblink where not exists(select ... from localtable) уже без полной выборки не получится использовать, видимо придется разбивать задачу на 3 части.
Спасибо.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 6 (Гостей: 6)

© 2000-2024 Fox Club 
Яндекс.Метрика