|
|
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть запрос следующего вида begin for k in 0 .. 9 loop insert into new_table select t1.date, field1, sum1, sum2 from t1 inner join ( select date, field1, sum(field2) sum1 from t2 where date = to_date('01.02.2016','dd.mm.yyyy') + k ) t2 on t1.field1 = t2.field1 left join ( select date, field1, sum(field2) sum2 from t3 where date = to_date('01.02.2016','dd.mm.yyyy') + k ) t2 on t1.field1 = t3.field1 ; commit; end loop; end; То есть нужно циклом пройтись по диапазону дат с 1-го по 10-е февраля. Без цикла этот запрос работает быстро и вставляет значения в таблицу, но в цикле даже с одной итерацией справиться не может. В чем может быть дело и как это исправить? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 13:30:05 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
GSarВ чем может быть делопровидение намекает что для вставки цикл не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 14:49:06 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
Объединяемые таблицы слишком большие, без цикла запрос по всему диапазону дат не отрабатывает. И суть вопроса скорее в том, почему при замене k на любое целое число, вставка осуществляется почти моментально, а если же в коде использовать именно переменную (даже без цикла), то запрос зависает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 17:20:34 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
GSarОбъединяемые таблицы слишком большие, без цикла запрос по всему диапазону дат не отрабатывает. Отрабатывает. И суть вопроса скорее в том, почему при замене k на любое целое число, вставка осуществляется почти моментально, а если же в коде использовать именно переменную (даже без цикла), то запрос зависает. А суть ответа в том, что вам надо подучить SQL. Конечно, кроме этого, совершенно необходимо узнать про Oracle Wait Interface, трассировку (10046/tkprof etc), как посмотреть и интерпретировать планы и почему Oracle оценивает стоимость выполнения так, как он оценивает. http://www.sql.ru/forum/1221655/posovetuyte-novichku ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 17:46:53 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
<мимо пробегая> а коммит внутри цикла то тебе зачем? </мимо пробегая> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2016, 19:28:33 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
Зачем loop? Чем BETWEEN не угодил? Религия не позволяет использовать? Вместо date = to_date('01.02.2016','dd.mm.yyyy') + k Надо date BETWEEN to_date('01.02.2016','dd.mm.yyyy') AND to_date('10.02.2016','dd.mm.yyyy') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 11:53:27 |
|
||
|
Медленный insert в цикле
|
|||
|---|---|---|---|
|
#18+
GSarИ суть вопроса скорее в том, почему при замене k на любое целое число, вставка осуществляется почти моментально, а если же в коде использовать именно переменную (даже без цикла), то запрос зависает. Может в таблице есть одноименное поле "K"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 12:54:58 |
|
||
|
|

start [/forum/topic.php?fid=52&tid=1887923]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
22ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 190ms |
| total: | 270ms |

| 0 / 0 |
