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