|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
Допустим у меня есть справочник REF, записи REC и детали записей DETAILS. В деталях может быть сторнирование и мне нужно отобрать неаннулированные записи. Сейчас я делаю так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но может быть я недооцениваю оптимизатор Oracle и внутри T можно делать группировку непосредственно по DETAILS (без дополнительной фильтрации), а фильтр вынести на основной уровень? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 08:58 |
|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
напишите оба варианта и посмотрите планы, в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 09:46 |
|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
По времени выполнения оба варианта одинаковы, по планам в первом варианте есть table access full для REC и DETAILS, во втором варианте table access full для REC и использование индексов DETAILS. Но не уверен, что это показательно, потому что таблицы маленькие. У меня нет проблем с производительностью запросов, меня интересует, какой вариант более правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 09:56 |
|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
наполните таблицы тестовыми сгенерированными записями ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 10:27 |
|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
Alibek B. Но может быть я недооцениваю оптимизатор Oracle Оптимизатор Вы скорее переоцениваете, а вот возможности языка - да, недооцениваете. Как правило, идея дважды соединить один и тот же набор данных дает очень мало профита. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 15:13 |
|
А как правильно делать запрос с учетом агрегации потомков?
|
|||
---|---|---|---|
#18+
andrey_anonymous Оптимизатор Вы скорее переоцениваете, а вот возможности языка - да, недооцениваете. Как правило, идея дважды соединить один и тот же набор данных дает очень мало профита. Вероятно да. Поменял таблицы в запросе так, чтобы DETAILS был таблицей на пару сотен миллионов записей, а кардинальность остальных таблиц была более-менее сопоставимой. Второй вариант работает определенно лучше, чем первый. Я бы даже сказал, что был удивлен, насколько быстро Oracle смог сгруппировать столь большую таблицу, пусть даже в результате количество строк небольшое. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:01 |
|
|
start [/forum/topic.php?fid=52&msg=39892692&tid=1881828]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 157ms |
0 / 0 |