|
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
|
|||
---|---|---|---|
#18+
Всем Привет! Почему запрос отрабатывает по разному в зависимости от наличия/отсутствия переменных запроса? Есть некий отчет, текст запроса которого формируется динамически в 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, а правую границу периода генерю по старому(прямо в код), то все работает быстро как и раньше. Как встроенные переменные могут повлиять на план выполнения запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2002, 12:42 |
|
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
|
|||
---|---|---|---|
#18+
Привязка переменных происходит позже, чем выбор плана. Поэтому оптимизатор не знает точного диапазона выбираемых данных и объема по отношению ко всей таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2002, 12:46 |
|
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
|
|||
---|---|---|---|
#18+
Посмотрите планы выполнения и тогда станет ясно. Я бы рекомендовал не использовать встроенные переменные, т.к. в конечном итоге ваше приложение будет работать медленнее, чем с динам. перем. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2002, 13:01 |
|
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
|
|||
---|---|---|---|
#18+
Вот задница!!! Если каждый раз распарсивать одно и то же выражение с разными условиями, то теряем в производительности на распарсивание, если используем переменные, то теряем на плане..... На кой нам нужон такой оптимизатор... Там где есть динамическая привязка бум использовать явные хинты... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2002, 13:57 |
|
Почему запрос отрабатывает по разному в зависимости от налич/отсутств.переменных
|
|||
---|---|---|---|
#18+
>Вот задница!!! Если каждый раз распарсивать одно и то >же выражение с разными условиями, то теряем в >производительности на распарсивание, если используем >переменные, то теряем на плане..... На кой нам нужон >такой оптимизатор... Там где есть динамическая >привязка бум использовать явные хинты... Я бы так не горячился. Статистика используется и с динамической привязкой тоже. Не используются только гистограммы, содержащие информацию о линейности распределения значений в столбце. У вас должна быть уж очень большие столбцы и доволно специфические запросы для того, чтоб это существенно влияло на план выполнения. В таком случае (приложение типа datawarehouse) время на новый разбор (как и затраты на shared pool) будет несравнено менее значимым и можно использовать нединам. переменные. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2002, 16:08 |
|
|
start [/forum/topic.php?fid=52&msg=32046787&tid=1993153]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 298ms |
total: | 436ms |
0 / 0 |