Hello, Dmitry!
You wrote  on Wed, 21 Jun 2006 14:22:19 +0400:

 DY> "Yuri Grabar" <[EMAIL PROTECTED]> wrote: > > where DOC_DATE between 
?DF and
 DY> ?DT
 ??>>    and FROM_ID = ?FROM_ID
 ??>>    and DOCUMENT_ID = 2
 ??>>
 ??>> FROM_ID и DOCUMENT_ID - внешние ключи, по полю DOC_DATE есть индекс.
 ??>> Селективности по индексам:
 ??>>
 ??>> по DOC_DATE - 0,00048169
 ??>> по FROM_ID - 0,00017614
 ??>> по DOCUMENT_ID - 0,03333333

 DY> С точки зрения стоимости, выигрывает DOCUMENT_ID.

Эээ... Разве не чем меньше - тем лучше? Нелогично как-то... Там вариантов 
значений-то всего 30 штук. Плохой индекс, но он от внешнего ключа.

 ??>> Количество индексных чтений из таблицы порядка 20 тыс с
 ??>> соответствующими тормозами... Заставить оптимизатор использовать
 ??>> индекс по DOC_DATE удалось только при записи запроса в таком
 ??>> виде: select count(*) from DOCS where DOC_DATE between ?DF and ?DT
 ??>> and FROM_ID+0 = ?FROM_ID   and DOCUMENT_ID+0 = 2 в любом другом
 ??>> варианте индекс по DOC_DATE не используется вообще.

 DY> Даже так:

 DY> where DOC_DATE between ?DF and ?DT
 DY>     and FROM_ID = ?FROM_ID
 DY>     and DOCUMENT_ID+0 = 2

 DY> ?

Так берет по FROM_ID и все. Только если явно запретить использовать индексы 
и по FROM_ID и по DOCUMENT_ID возмет индекс по DOC_DATE.

-- 
With best regards, Yuri Grabar. 



--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить