Hello, Dmitry!
Dmitry Yemanov wrote:
"ArtGal" <[EMAIL PROTECTED]> wrote:where ((S.DFM_ID = :ADFM_ID) or (:ADFM_ID = -2147483467)) and ((S.DD >= :DD1) or (:DD1 = cast('01.01.01' as date))) and (S.CA_LST_ID = :CA_LST_ID) PLAN SORT ((S INDEX (APT_DFM_SPEED_PK)))Твой план неверен. Битовую карту для OR можно использовать только если *обе* части OR отображаются на индекс. В отличие от AND, где достаточно одной части. Так что учи матчасть.
что-то я не углядел вначале, а это оказалась классика: where (field = :param) or (:param = 0). естественно, что оптимизатор на этапе prepare не может гадать о значениях параметров, соответственно считает, что :param =0 может быть true, а поэтому индекс по field брать ни к чему. -- Dmitri Kuzmenko, www.ibase.ru, (495) 953-13-34

