"Ivan Markov" <[EMAIL PROTECTED]> wrote:

SELECT DOSTAVKA.DOSTAVKA_ID, DOSTAVKA.DOSTAVKA_DATE,
          DOSTAVKA.STATUS,         DOSTAVKA_SCHETA.SCHET
FROM DOSTAVKA
  INNER JOIN DOSTAVKA_SCHETA ON
  (DOSTAVKA.DOSTAVKA_ID = DOSTAVKA_SCHETA.DOSTAVKA_ID)
WHERE
    DOSTAVKA_SCHETA.SCHET = '111/111'
  AND
    DOSTAVKA.STATUS = 1
ORDER BY DOSTAVKA.DOSTAVKA_DATE, DOSTAVKA.DOSTAVKA_ID

План:
PLAN SORT (JOIN (DOSTAVKA INDEX (DOSTAVKA_IDX2),DOSTAVKA_SCHETA INDEX
(DOSTAVKA_SCHETA_IDX1,FK_DOSTAVKA_SCHETA_1)))

Лезу в анализ производительности,
удивляюсь:
Индексные чтения:
DOSTAVKA_SCHETA - 2 ... как и ожидалось!
DOSTAVKA - 8 !!!!!

Дык на таблицу DOSTAVKA есть только условие по STATUS, так что все логично. В твоем конкретном варианте лучший результат был бы, если бы джойн начался с таблицы DOSTAVKA_SCHETA, но если у тебя там будут записи по счету '111/111', относящиеся к неподписанным доставкам, то все равно чтений из первой таблицы будет больше, чем записей в результате. Это абсолютно нормально.

Получается что что бы сформировать
результат из 2-х строк, запрос молотит
все индексы STATUS со значением 1 ?

Результат из 2-х строк получается пересечением условий по двум таблицам. При этом теоретически невозможно прочитать каждую лишь минимально необходимое число раз.


--
Дмитрий Еманов


Ответить