На мой взгляд, запрос без связки по ID несколько рискованный. И не самый быстрый. Я бы не морщил моск и вынес бы группировку во внешний цикл, хоть в SP хоть на клиенте, а удалял бы внутри по ID. Когда речь идёт об умирании запросов на каких-то 4-х лимонах, то это однозначно говорит о хреновых планах на хреновых индексах. Не обязательно хреновых по жизни, а хреновых для этого запроса. Типа
COUNT
===========
4030740
Код: Выделить всё
select count (distinct code)
from sebgup_arc
COUNT
===========
2118
а теперь группировка с полным фетчем:
Код: Выделить всё
select count(*), code
from sebgup_arc
group by code
PLAN (SEBGUP_ARC ORDER SEBGUPA_SPR)
Elapsed time= 568.33 sec
Код: Выделить всё
select count(*), code+0
from sebgup_arc
group by 2
PLAN (SEBGUP_ARC NATURAL)
Elapsed time= 16.01 sec
Этому компу уже года 4. Если нужно отфетчить весь результат сортировки/группировки, то натурал выиграет всегда и тем больше, чем больше её объём. А вот если надо быстро отфетчить первый десяток строк, а дальше трава не расти - то обычно (когда индекс не по полю да/нет) наоборот.