Dmitry Yemanov wrote:

А ты ведь абсолютно прав, видать к вечеру у мну соображалка отказала.
Сочетание ORDER и INDEX - есть зло :-)


Чё-та робот-перлюстратор на линии сегодня совсем дурит. Предыдущий пост уже с час где-то слоняется. Не согласная я, что всегда зло. Моя полуторка, правда, не умеет показывать индекс-план в случае ордер-плана, но умеет таки его тихонечко применять (ты меня сам этому учил). Результаты при отключении то одного, то другого индекса в усечении и потом обоих вместе и потом сортировки по индексу - вота (все запросы выполнялись через дисконнект-коннект):

SHOW INDEX sebg_arc
SEBGA_DATE DESCENDING INDEX ON SEBG_ARC(DATEREG)
SEBGA_SPR UNIQUE INDEX ON SEBG_ARC(CODE, ARCCODE)

Я так думаю, что задействованы оба на усечение и один потом ещё раз на сортировку:
________________________________________________________
select first 1 arccode from sebg_arc where code=90 and datereg<'01.01.2006'
order by datereg desc

PLAN (SEBG_ARC ORDER SEBGA_DATE)

    ARCCODE
===========

    1194856

Current memory = 1698720
Delta memory = 589924
Max memory = 1745720
Elapsed time= 0.03 sec
Buffers = 75
Reads = 70
Writes 0
Fetches = 397


Отключаем композит
________________________________________________________

select first 1 arccode from sebg_arc where code+0=90 and datereg<'01.01.2006'
order by datereg desc

PLAN (SEBG_ARC ORDER SEBGA_DATE)

    ARCCODE
===========

    1194856

Current memory = 1298632
Delta memory = 189836
Max memory = 1494704
Elapsed time= 0.03 sec
Buffers = 75
Reads = 76
Writes 0
Fetches = 3122


Отключаем датный
________________________________________________________

select first 1 arccode from sebg_arc where code=90 and datereg+0<'01.01.2006'
order by datereg desc

PLAN (SEBG_ARC ORDER SEBGA_DATE)

    ARCCODE
===========

    1194856

Current memory = 1770464
Delta memory = 661668
Max memory = 1770464
Elapsed time= 0.13 sec
Buffers = 75
Reads = 739
Writes 0
Fetches = 2834

Оставляем только сортировку
________________________________________________________

select first 1 arccode from sebg_arc where code+0=90 and datereg+0<'01.01.2006'
order by datereg desc

PLAN (SEBG_ARC ORDER SEBGA_DATE)

    ARCCODE
===========

    1194856

Current memory = 1611192
Delta memory = 502396
Max memory = 1611192
Elapsed time= 1.88 sec
Buffers = 75
Reads = 4419
Writes 0
Fetches = 823743

Оставляем только усечение
________________________________________________________

select first 1 arccode from sebg_arc where code=90 and datereg<'01.01.2006'
order by datereg+0 desc

PLAN SORT ((SEBG_ARC INDEX (SEBGA_SPR,SEBGA_DATE)))

    ARCCODE
===========

    1194856

Current memory = 2982656
Delta memory = 1873860
Max memory = 3114000
Elapsed time= 1.99 sec
Buffers = 75
Reads = 3303
Writes 0
Fetches = 9698

________________________________________________________

--
Regards. Ded.

Ответить