|
exists или join с группировкой?
|
|||
---|---|---|---|
#18+
Делаю синхронизацию ИС с битриксом. У битрикса имеется ограничение по частоте запросов, а в ИС нет событий. Поэтому синхронизацию делаю периодическим получением исходных данных с определением изменившихся записей. В таблице CL дата предыдущей синхронизации хранится в поле MOMENT, соответственно мне нужно найти записи, у которых были изменения после MOMENT. Есть такой запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Его можно сделать и так: Код: plsql 1. 2. 3. 4. 5. 6.
На тестовых данных он и выполняется быстрее, и explain plan выглядет проще. Но меня когда-то давно учили избегать сложных подзапросов в select. Не подскажите, в данном случае какой способ лучше? Некоторые проверяемые наборы данных могут быть немаленькими (десятки миллионов записей), хотя по используемым полям есть индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 11:35 |
|
exists или join с группировкой?
|
|||
---|---|---|---|
#18+
Alibek B., Когда оперативные данные нужно получать из лога, это отвратно спроектированная система. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 12:41 |
|
exists или join с группировкой?
|
|||
---|---|---|---|
#18+
Alibek B., я exist писал иначе (возможно из-за непонимания case when exists () ...) ,(select 1 from dual where exists (select * from BM_ACTION_LOG where CUSTOMER_ID = CL.CLIENT_ID and MOMENT >= CL.MOMENT and ACTION_ID < 1000)) FLAG_LOG ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2020, 13:52 |
|
|
start [/forum/topic.php?fid=52&fpage=36&tid=1880866]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 437ms |
0 / 0 |