ускорить select через database link Oracle
От: Wit  
Дата: 16.06.10 03:37
Оценка:
Здравствуйте! Можно ли ускорить выполнение такого запроса:

select f1,f2,(select p1 from t1 where p2 = table1.f3) as f3 from table1@db1

т/е по некоторым полям из таблицы table1 с базы db1 подставляем значения таблицы t1 текущей БД


запрос select f1,f2,f3 from table1@db1 выполняется пару секунд, а тот что выше раз в 100 дольше. t1 проиндексирована
Re: ускорить select через database link Oracle
От: DrDred Россия  
Дата: 16.06.10 04:44
Оценка:
Здравствуйте, Wit, Вы писали:

Wit>Здравствуйте! Можно ли ускорить выполнение такого запроса:


Wit>
Wit>select f1,f2,(select p1 from t1 where p2 = table1.f3) as f3 from table1@db1 
Wit>

Wit>т/е по некоторым полям из таблицы table1 с базы db1 подставляем значения таблицы t1 текущей БД


Wit>запрос select f1,f2,f3 from table1@db1 выполняется пару секунд, а тот что выше раз в 100 дольше. t1 проиндексирована


Можно попробовать переписать его по-нормальному, чтобы дать шанс оптимизатору Оракла

select dt.f1, dt.f2, t1.p1
  from table1@db1 dt
       join t1 on t1.p2 = dt.f3


Если не поможет, можно попробовать вариант с materialized view.
1. Делаем

create materialized view table1_db1 as select * from table1@db1


2. Далее работаем с ней как с обычной таблицей, не забывая делать refresh когда нужны свежие данные

На самом деле, это очень приблизительное описание идеи, реализация сильно зависит от существующей ситуации и требований
--
WBR, Alexander
Re[2]: ускорить select через database link Oracle
От: night beast СССР  
Дата: 16.06.10 04:55
Оценка: +1
Здравствуйте, DrDred, Вы писали:

DD>Можно попробовать переписать его по-нормальному, чтобы дать шанс оптимизатору Оракла


DD>select dt.f1, dt.f2, t1.p1
DD>  from table1@db1 dt
DD>       join t1 on t1.p2 = dt.f3


тут наверно left join
нужно в плане посмотреть, используются ли индексы
Re[3]: ускорить select через database link Oracle
От: DrDred Россия  
Дата: 16.06.10 05:03
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, DrDred, Вы писали:


DD>>Можно попробовать переписать его по-нормальному, чтобы дать шанс оптимизатору Оракла


NB>
DD>>select dt.f1, dt.f2, t1.p1
DD>>  from table1@db1 dt
DD>>       join t1 on t1.p2 = dt.f3
NB>


NB>тут наверно left join

NB>нужно в плане посмотреть, используются ли индексы

Да, согласен. Все будет зависеть от плана запроса. Тут как раз и есть засада с таблицей через dblink — по ней статистики нет, поэтом далеко не факт, что будет выбран оптимальный план запроса. Но так как у нас нет вообще никакой информации об сущности этих таблиц — то строить свои предположения тем более бессмысленно.
--
WBR, Alexander
Re: ускорить select через database link Oracle
От: Anvano Россия  
Дата: 16.06.10 07:13
Оценка:
Здравствуйте, Wit, Вы писали:

Wit>Здравствуйте! Можно ли ускорить выполнение такого запроса:


Wit>
Wit>select f1,f2,(select p1 from t1 where p2 = table1.f3) as f3 from table1@db1 
Wit>

Wit>т/е по некоторым полям из таблицы table1 с базы db1 подставляем значения таблицы t1 текущей БД


Wit>запрос select f1,f2,f3 from table1@db1 выполняется пару секунд, а тот что выше раз в 100 дольше. t1 проиндексирована


Неплохо было бы кроме самих запросов увидеть еще и планы. Это раз.
Могли бы хотя бы приблизительно дать информацию по размерам таблиц, сколько записей (тысячи, миллионы, сто миллионов)

Во-вторых, некорректно говорить, что у вас последний запрос выполняется пару секунд. Это первые N строк выборки вытягиваются у вас по dblink`у за пару секунд, а делать фетч до конца пробовали? Скорее всего полная выборка будет фетчиться столько же, сколько и идет верхний запрос либо сравнимо с этим.
--------------------------------------------------------------
Правильно заданный вопрос содержит в себе половину ответа
Re[2]: ускорить select через database link Oracle
От: wildwind Россия  
Дата: 16.06.10 11:49
Оценка: +1
Здравствуйте, Anvano, Вы писали:

A>Неплохо было бы кроме самих запросов увидеть еще и планы. Это раз.

A>Могли бы хотя бы приблизительно дать информацию по размерам таблиц, сколько записей (тысячи, миллионы, сто миллионов)

Тут не просто план, а трассировку неплохо бы увидеть. Вся необходимая инфа там будет.
Re[2]: ускорить select через database link Oracle
От: MasterZiv СССР  
Дата: 16.06.10 15:45
Оценка:
DrDred wrote:

Можно попробовать переписать его по-нормальному, чтобы дать шанс
> оптимизатору Оракла
>
> select dt.f1, dt.f2, t1.p1
> from table1@db1 dt
> join t1 on t1.p2 = dt.f3

А чем тебе тот-то вариант не нравится ?

> Если не поможет, можно попробовать вариант с materialized view.


Ага, ты ещё предложи хранилище данных отдельное создать для оптимизации
этого сраного запросика.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: ускорить select через database link Oracle
От: Аноним  
Дата: 17.06.10 04:44
Оценка:
в таблицу table1@db1 вставляется в сутки 10 млн. строк, она секционирована по месяцам, а t1 — маленькая но их несколько(для примера написал одну), там от 100 до 100 тыс записей. В запроесе еще есть условие выбора, но для примера сразу не написал, пусть будет

select f1,f2,(select p1 from t1 where p2 = table1.f3) as f3 from table1@db1 where f4 = 543
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.