2016-11-07 5 views
0

EDIT2: перефразировать весь вопрос так понятнееGroup, вызывая огромное увеличение времени выполнения запроса

У меня довольно долго с пунктом, который генерирует таблицу подзапроса 400 строк и 10 столбцов в течение секунды от довольно больших столов.

Однако я хочу создать группу по этому подзапросу, и там, где возникает проблема, - когда я делаю эту группу и использую ее далее в предложении запроса, запрос выполняется в течение 15 минут и по-прежнему нет результата, поэтому Я его прекратил.

Если я использую только группу, и остановить сценарий там, то она проходит под второй, с помощью этого сценария:

select ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky, 
sum(d.dok_sk_vyp) suma_fakt, 
sum(d.dok_sk_vyp-d.dok_sk_uzn) neuzn_vyk, 
sum(d.dok_sk_uzn) suma_uzn, 
sum(d.dok_sk_uct) suma_uct, 
count(*) as pocet_vyk 
from portfolio d 
group by ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky 

Где portfolio находится в предыдущей части с п

Однако , если я использую его снова как подзапрос, например:

pf as(
select ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky, 
sum(d.dok_sk_vyp) suma_fakt, 
sum(d.dok_sk_vyp-d.dok_sk_uzn) neuzn_vyk, 
sum(d.dok_sk_uzn) suma_uzn, 
sum(d.dok_sk_uct) suma_uct, 
count(*) as pocet_vyk 
from portfolio d 
group by ROK,d.typ,LIM_DGR_KOEF, LIM_HODNOTA, LIMIT_OD, LIMIT_DO,lek_uvazky 
)select * from pf 

Затем объяснить изменения плана и очень тяжелый.

Вот объясняющие планы: http://imgur.com/a/nJpT8

Есть ли способ, чтобы диктовать оптимизатор выбрать тот же путь, что и в примере быстрее?

+2

Как минимум, вам нужно будет опубликовать план запроса для обоих. Очень сложно рассуждать о том, что мог бы сделать оптимизатор, а затем спекулировать на предположениях о том, почему это могло бы сделать то, о чем мы размышляем. –

+0

Пожалуйста, добавьте план выполнения для исходного запроса. –

+0

@JustinCave Я добавил планы на imgur album –

ответ

0

Не видя структуры таблиц и план выполнения, я могу предложить две вещи:

1) Добавьте соответствующие индексы, если они еще не существует.

2) Создайте временную таблицу с этим предложением WITH, а затем используйте тот же самый выбор в таблице.

+0

добавлена ​​дополнительная информация к вопросу –

+0

2 HUGE 'No's. Это Oracle no MySql и Indexes - это то, что убивает его производительность запросов в первую очередь. –

+0

Отсюда слово «правильный». Правильные индексы могут только ускорить запрос, а не повредить его[email protected] – sagi

Смежные вопросы