Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Замена в запросе функции на select - ускорение в 6 раз  [new]
harder
Member

Откуда:
Сообщений: 269
В предложении where есть строка
...
...
AND lines.org_id = fnd_profile.value('ORG_ID')
- Время выполнения запроса - 65 сек

Замена на
...
...
AND lines.org_id = (select fnd_profile.value('ORG_ID') from dual)
- Сокращает время выполнения до 12 сек

Почему бы так?
И такой прием следует использовать во всех запросах?
2 апр 08, 13:20    [5491904]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
harder
Почему бы так?


Потому что функция - это конструкция PL/SQL, а не SQL. И при необходимости
выполнения функции в SQL происходит переключение контекста между SQL- и PL/SQL машиной.
На что тратятся ресурсы.


И такой прием следует использовать во всех запросах?


Следует по возможности избегать использования user-defined functions в SQL.
2 апр 08, 13:24    [5491933]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Elic
Member

Откуда:
Сообщений: 29990
harder
Почему бы так?
Некоррелированные подзапросы выполняются, как правило, в первую очередь и один раз. В отличие от.
2 апр 08, 13:25    [5491941]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
harder
Member

Откуда:
Сообщений: 269
Запрос чужой. Я бы вообще передавал это литералом.

Все таки понял не до конца, извините. Функция, ведь, выполняется в обоих случаях.
И только однин раз тоже в обоих случаях. Откуда выйгрыш?

А! Планы запроса в обоих случая одинаковы!
2 апр 08, 13:28    [5491968]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Elic
Member

Откуда:
Сообщений: 29990
Дубовая голова
происходит переключение контекста
Оно-то конечно так... Но не это здесь главное :)
2 апр 08, 13:28    [5491969]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
Дубовая голова
...


А, пардон, я не тему. Не увидел функцию в подзапросе.
Слепой. :)

2Автор: Но тем не менее, учтите вышесказанное.
2 апр 08, 13:28    [5491975]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
badmintonist
Member

Откуда:
Сообщений: 330
Во втором случае видимо функция выполняется один раз, см. в сторону DETERMINISTIC
2 апр 08, 13:29    [5491980]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Elic
Member

Откуда:
Сообщений: 29990
harder
И только однин раз тоже в обоих случаях. Откуда выйгрыш?
2 апр 08, 13:30    [5491989]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
harder
Member

Откуда:
Сообщений: 269
to "Дубовой голове"

= (select fnd_profile.value('ORG_ID') from dual)

ну, мне кажется, что это подзапрос. А в нем - функция.
2 апр 08, 13:35    [5492031]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
harder
Запрос чужой. Я бы вообще передавал это литералом.

Все таки понял не до конца, извините. Функция, ведь, выполняется в обоих случаях.
И только однин раз тоже в обоих случаях. Откуда выйгрыш?

А! Планы запроса в обоих случая одинаковы!

а вот проверьте это и определенно увидите что-то похожее на
>=один-раз-на-строку. Хотя если у вас цель той функции - дать одно-на-запрос значение,
то в любом из ваших вариантов вы заставляете сервер ~ бегать по-кругу с пустой тачкой.
2 апр 08, 13:41    [5492079]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
harder

ну, мне кажется, что это подзапрос. А в нем - функция.


Правильно кажется. Но я уже извинился. :)
2 апр 08, 13:42    [5492090]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
harder
Member

Откуда:
Сообщений: 269
А где и чем увидеть многократное выполнение (по одному на строку в случае
AND lines.org_id = fnd_profile.value('ORG_ID')

и однократное в этом случае
AND lines.org_id = (select fnd_profile.value('ORG_ID') from dual)
2 апр 08, 14:28    [5492402]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
harder
А где и чем увидеть многократное выполнение (по одному на строку в случае
AND lines.org_id = fnd_profile.value('ORG_ID')

и однократное в этом случае
AND lines.org_id = (select fnd_profile.value('ORG_ID') from dual)
В плане запроса, в предикатах.
2 апр 08, 14:33    [5492446]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
sendal
Guest
Дубовая голова


И такой прием следует использовать во всех запросах?

Следует по возможности избегать использования user-defined functions в SQL.

Ну, влияние переключения контекстов (особенно в заведомо детерминированных функциях) сильно преувеличено ...
2 апр 08, 14:38    [5492495]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
harder
А где и чем увидеть многократное выполнение (по одному на строку в случае
AND lines.org_id = fnd_profile.value('ORG_ID')

и однократное в этом случае
AND lines.org_id = (select fnd_profile.value('ORG_ID') from dual)

откуда оракл узнает, что твоя функция детерминированная?
подзарос твой гарантирует, что ты эту функцию вызовишь лишь один раз в определенный момент времени.
а в первом случае, оракл не уверен, что у тебя со временем функция не будет менять значения, поэтому и выполняет ее для каждой строки
2 апр 08, 14:52    [5492639]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
Дубовая голова
Потому что функция - это конструкция PL/SQL, а не SQL. И при необходимости
выполнения функции в SQL происходит переключение контекста между SQL- и PL/SQL машиной.
На что тратятся ресурсы.

теоретик
2 апр 08, 14:54    [5492661]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
==Tims==

теоретик


Тебя мне точно не переплюнуть

Ты, Зин, уж лучше помолчала бы...
2 апр 08, 15:00    [5492709]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
Дубовая голова
==Tims==

теоретик


Тебя мне точно не переплюнуть

Ты, Зин, уж лучше помолчала бы...

да вижу, что ты даже не теоретик...а так ... форумный копи-пастер
2 апр 08, 15:02    [5492731]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
badmintonist
Member

Откуда:
Сообщений: 330
==Tims==
откуда оракл узнает, что твоя функция детерминированная?
Если ему об этом сказать

ЗЫ: не неси бред, плиз
2 апр 08, 15:02    [5492735]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Дубовая голова
Member [заблокирован]

Откуда: с цепи сорвался
Сообщений: 1821
==Tims==
да вижу, что ты даже не теоретик...а так ... форумный копи-пастер


Есть что по делу возразить на мой пост ? Или тебе без бана - как без пряников ?

Давай так - или ты мои слова опровергаешь (ссылки на то, что я был не в теме, ен принимаются -
я без твоей помощи извинился перед автором), или ты затыкаешь свой фонтан, или я прошу тебя
забанить.

Я тебе лично рекомендую идти в долгое пешее эротическое путешествие, оно полезнее для
здоровья.
2 апр 08, 15:05    [5492760]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
harder
Member

Откуда:
Сообщений: 269
Во! Теперь все сложилось.

если мы превращаем функцию в подзапрос, то она крутится АДЗЫН раз.

Всем спасибо!

Сейчас сделаю морду кирпичем и буду свысока поучать разрабочиков!
:)
2 апр 08, 15:12    [5492818]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9257
harder

...если мы превращаем функцию в подзапрос, то она крутится АДЗЫН раз....

Не... если мы преврашаем функцию в специальный подзапрос... то да... можно заставить ее выполняться только один раз.

Например, читать Кайта. У него насчет этого есть.
2 апр 08, 15:28    [5492927]     Ответить | Цитировать Сообщить модератору
 Re: Замена в запросе функции на select - ускорение в 6 раз  [new]
==Tims==
Member [заблокирован]

Откуда: Гена Евтушенко
Сообщений: 343
badmintonist
==Tims==
откуда оракл узнает, что твоя функция детерминированная?
Если ему об этом сказать

ЗЫ: не неси бред, плиз

а ты попробуй скажи...
а потом поговорим
и сам почитай свою ссылочку изначально

автор
Во втором случае видимо функция выполняется один раз, см. в сторону DETERMINISTIC
2 апр 08, 15:35    [5492986]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить