Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Оптимизация запроса (group by)  [new]
test_guest
Guest
Доброго времени суток. Прошу совета. Есть запрос. Есть группировка в нем. Поля ptt.pu_id, ptt.pu_name, ptt.pu_create это поля одной и той же таблицы. То есть мне группировка нужна только по одному полю ptt.pu_id. Но что бы показывать другие поля в запросе мне приходиться группировать и по ним(одно из них дата, другое строка). Это критически повышает "вес" запроса - в три раза. Подскажите как это можно обойти. Ниже шаблончик запроса.
[/src]
select ptt.pu_id,ptt.pu_name,ptt.pu_create,  from 
                    ( ... ) ptt 

group by ptt.pu_id,ptt.pu_name,ptt.pu_create 

а хотелось бы так
select ptt.pu_id,ptt.pu_name,ptt.pu_create,  from 
                    ( ... ) ptt 

group by ptt.pu_id            --ptt.pu_name,ptt.pu_create 
6 дек 08, 19:40    [6534390]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
Bely
Member

Откуда: Москва
Сообщений: 1903
test_guest
а хотелось бы так
Стандартное решение для такого случая min() или max()
select ptt.pu_id,min(ptt.pu_name) as pu_name_,max(ptt.pu_create) as pu_create_  
from   ( ... ) ptt 
group by ptt.pu_id            --ptt.pu_name,ptt.pu_create 
6 дек 08, 19:47    [6534406]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
test_guest
Guest
Счас посмотрю прирост скорости
6 дек 08, 19:52    [6534419]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
test_guest
Guest
прирост есть в два раза.
Будут ли еще варианты ?
6 дек 08, 19:58    [6534437]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116174
test_guest
прирост есть в два раза.
Будут ли еще варианты ?


А зачем Вам вообще группировка ?
Вы понимаете, что в варианте предложенным Bely, Вы увидите какое то одно
агрегированное значение поля по группе ? Ну например

из

1 2 3
1 2 4

Вы получите одну строку

1 2 3

например
Это Вас устраивает ?
6 дек 08, 20:07    [6534455]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
test_guest
Guest
Да это устраивает. Потому что я увереен что такой ситуации быть не можнет. Равенство по первому полю однозначно гарантирует равенство по остальным двум
6 дек 08, 20:18    [6534478]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116174
test_guest
Да это устраивает. Потому что я увереен что такой ситуации быть не можнет. Равенство по первому полю однозначно гарантирует равенство по остальным двум


Тогда нормально...Правда не совсем понятна необходимость группировки,
но Вам виднее...
6 дек 08, 20:37    [6534514]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
ZVV
Member

Откуда: Минск
Сообщений: 744
test_guest
Это критически повышает "вес" запроса - в три раза.

вы хотите сказать, что в 3 раза дольше выполняется с группировкой по трём полям, по сравнению с одним? или что?
6 дек 08, 22:06    [6534659]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
test_guest
Guest
да
7 дек 08, 14:31    [6535365]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
MHead
Guest
а не лучше ли было использовать distinct
7 дек 08, 17:23    [6535624]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
test_guest
Guest
мне нужна групировка
8 дек 08, 19:33    [6541685]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса (group by)  [new]
guest19
Guest
test_guest
мне нужна групировка


Не имея перед глазами запроса сложно советовать.
Возможны ситуации когда эффективней еще один join на результат.
8 дек 08, 20:47    [6541870]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить