Kyamranbey
Дата: 19.12.2012 14:59:38
Всем привет
Уважаемые, помогите советом.
есть один большой запрос, доставшийся по наследству, в котором часть записей появляется если, например, в фильтре по дате документа, дату взять в trunc().
Запрос большой с несколькими union all, на которые сверху и накладывается фильтр по дате.
Последний подзапрос в union all, если отдельно запустить с этим внешним фильтром по дате, выводит нужные записи.
План запроса при помещении поля дата документа в trunc() меняется не значительно. Исчезает шаг FILTER(как раз на той последней секции unian all).
Не хочется тратить ваше время на вникание, выкладывая запрос сюда и его план.
Просто прошу помочь с подсказкой, с чем может быть связано.
Может статистику пересобрать. Интересно, просто, может еще в каких запросах будут подобные отсевы.
Кстати, базу залил с дампа 9i в 11g.
Так же создал dbms_stat -ом стат. таблицу и перетащил ее в 11 там проапгрейдил и применил.
Столкнулся впервые с такой ситуацией, больно не пинайте плиз.
Заранее благодарен.
Время и место
Дата: 19.12.2012 15:20:20
Может стоит все-таки заглянуть в табличку и внимательно посмотреть на поле с датой, на которое накладывается фильтр?
Вы с точностью в 101% найдете там дату и
время. Когда же вы фильтруете записи по дате, то ваше сравнение выглядит так:
and '12:45:34 13:45:12' < '12:45:34 00:00:00'(ваш параметр, переменная, фильтр и т.п. и т.д.)
Kyamranbey
Дата: 19.12.2012 22:35:55
нет. в том то и дело исключаются абсолютно все записи второго запроса(не только на границе условия). т.е. если берем второй подзапрос - добавляем к нему внешнее условие, то выводится куча записей.
ощущение, что взяли условия у первого подзапроса и приставили ко второму(у первого как раз исключаются записи удовлетворяющие второму)
Но на плане ничего подобного не наблюдается - каждая ветка union all обрабатывается отдельно. и после применения trunc() просто исчезает финальный FILTER у второго подзапроса.