powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
5 сообщений из 5, страница 1 из 1
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
    #32046783
mms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mms
Гость
Всем Привет!
Почему запрос отрабатывает по разному в зависимости от наличия/отсутствия переменных запроса?
Есть некий отчет, текст запроса которого формируется динамически в Delphi. Т.е. запрос типа:

sSQL:=
'SELECT ... FROM ... '+
'WHERE dat BETWEEN TO_DATE(''01.01.2001'',''dd.mm.yyyy'') AND '+
'TO_DATE(''10.01.2001'',''dd.mm.yyyy'') AND ...';

Значения даты прошиваются прямо в коде.
Запрос работает правильно и быстро.
И решил я даты загнать в переменные sDatBeg и sDatEnd:

sSQL:=
'SELECT ... FROM ... '+
'WHERE dat BETWEEN TO_DATE(:sDatBeg,''dd.mm.yyyy'') AND '+
'TO_DATE(:sDatEnd,''dd.mm.yyyy'') AND ...';

перед запуском запроса я эти переменные присваиваю через SetVariable(в Delphi) и запускаю запрос. Запрос правильно отрабытывает, но только где-то раз 20 медленнее.
Что еще интересно: если я использую только переменную sDatBeg, а правую границу периода генерю по старому(прямо в код), то все работает быстро как и раньше.
Как встроенные переменные могут повлиять на план выполнения запроса?
...
Рейтинг: 0 / 0
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
    #32046787
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привязка переменных происходит позже, чем выбор плана. Поэтому оптимизатор не знает точного диапазона выбираемых данных и объема по отношению ко всей таблице.
...
Рейтинг: 0 / 0
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
    #32046796
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите планы выполнения и тогда станет ясно. Я бы рекомендовал не использовать встроенные переменные, т.к. в конечном итоге ваше приложение будет работать медленнее, чем с динам. перем.
...
Рейтинг: 0 / 0
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
    #32046829
Ramil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот задница!!! Если каждый раз распарсивать одно и то же выражение с разными условиями, то теряем в производительности на распарсивание, если используем переменные, то теряем на плане..... На кой нам нужон такой оптимизатор... Там где есть динамическая привязка бум использовать явные хинты...
...
Рейтинг: 0 / 0
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
    #32046896
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Вот задница!!! Если каждый раз распарсивать одно и то
>же выражение с разными условиями, то теряем в
>производительности на распарсивание, если используем
>переменные, то теряем на плане..... На кой нам нужон
>такой оптимизатор... Там где есть динамическая
>привязка бум использовать явные хинты...

Я бы так не горячился. Статистика используется и с динамической привязкой тоже. Не используются только гистограммы, содержащие информацию о линейности распределения значений в столбце. У вас должна быть уж очень большие столбцы и доволно специфические запросы для того, чтоб это существенно влияло на план выполнения. В таком случае (приложение типа datawarehouse) время на новый разбор (как и затраты на shared pool) будет несравнено менее значимым и можно использовать нединам. переменные.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]