powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / один и тот же select внутри функций.. разное время
8 сообщений из 8, страница 1 из 1
один и тот же select внутри функций.. разное время
    #35072542
4_Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
делаю один и тот же селект внутри функции:

Код: plaintext
SELECT id into id_p from T1 where ....;

или делатю это как:

Код: plaintext
1.
2.
3.
4.
sql_str= 'SELECT id from T1 where ....';
for rec in execute sql_str 
loop
  id_p = rec.id;
END LOOP;

так вот, for rec работает на порядок(именно на порядок) быстрее чем первый вариант.
Вопрос, почему?
Сам запрос возврашает всего 1 строку (те не выводит много данных). Запрос с большой таблицы, около 1 млн записей, но в обоих случаях запросы идентичны.

Ещё вспомнил, что такая штука повторялась при переходе от версии к версии (в смысле апдейтах на новее), те в одной версии постгреса запросы имели одинаковую скорость, в другой разную.
К сожалению на каких версиях и как истории нет.
Сейчас стоит 8.2 версия.
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35073547
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
План первого запроса строится при первом обращении к функции за коннект и сохраняется таким.
Если план был не оптимален, или стал не оптимален (данные изменились), то запрос, естественно, будет тормозить.
Для второго варианта план строится на каждом вызове запроса - теряешь на постройке плана, но каждый раз он ближе к реальности.
Кроме того, при постройке первого плана значение локальных переменных считается не известным, т.е. строится "общий" план для всевозможных значений "параметров" (которые образуются в тех местах, где используются локальные переменные).
Во стором случае, запрос уже содержит все возможные значения, а значит план будет точнее.
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35073947
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слабо поискать по форуму? поиск: функция запрос план
- один и тот же select внутри функций.. разное время
- выполнение запроса в функции и вне
- Как посмотреть план запроса внутри функции
- Запрос в ф-ии стал на порядок медленнее...
- Запрос внутри ф-ции работает медленнее !?!?!?
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35074165
4_Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBatслабо поискать по форуму? поиск: функция запрос план
- один и тот же select внутри функций.. разное время
- выполнение запроса в функции и вне
- Как посмотреть план запроса внутри функции
- Запрос в ф-ии стал на порядок медленнее...
- Запрос внутри ф-ции работает медленнее !?!?!?

ну что за манеры...
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35074168
4_Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Funny_FalconПлан первого запроса строится при первом обращении к функции за коннект и сохраняется таким.
Если план был не оптимален, или стал не оптимален (данные изменились), то запрос, естественно, будет тормозить.
Для второго варианта план строится на каждом вызове запроса - теряешь на постройке плана, но каждый раз он ближе к реальности.
Кроме того, при постройке первого плана значение локальных переменных считается не известным, т.е. строится "общий" план для всевозможных значений "параметров" (которые образуются в тех местах, где используются локальные переменные).
Во стором случае, запрос уже содержит все возможные значения, а значит план будет точнее.

Спасибо.
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35077289
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4_Alex LeXa NalBatслабо поискать по форуму? поиск: функция запрос план
- один и тот же select внутри функций.. разное время
- выполнение запроса в функции и вне
- Как посмотреть план запроса внутри функции
- Запрос в ф-ии стал на порядок медленнее...
- Запрос внутри ф-ции работает медленнее !?!?!?

ну что за манеры...

Уважаемый человек потратил СВОЕ время. показал как надо искать, привел примеры и претензии?
Не хорошо!
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35078578
4_Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gold_ 4_Alex LeXa NalBatслабо поискать по форуму? поиск: функция запрос план
- один и тот же select внутри функций.. разное время
- выполнение запроса в функции и вне
- Как посмотреть план запроса внутри функции
- Запрос в ф-ии стал на порядок медленнее...
- Запрос внутри ф-ции работает медленнее !?!?!?

ну что за манеры...

Уважаемый человек потратил СВОЕ время. показал как надо искать, привел примеры и претензии?
Не хорошо!

Спасибо конечно, но без "слабо" было бы лучше, форум по моему и предназначен для бытрого решения поставленной задачи, не слабо перерыть кучу док и решить проблему, а вот экономить время....спасибо этому форуму и его участникам.

я кстати так и не увидел в сслыках по поиску причину "торможения" запроса, там только понято что планер работает по разному (это я и сам интуитивно понимал). А вот почему?
Funny_Falcon дал как по мне более исчерпывающую информацию. Можно конечно сказать что всё зависит от запроса, и надо исследовать проблему на конкретном примере, но закономерность повторяеться практически на ВСЕХ запросах где много данных и есть индексы.
...
Рейтинг: 0 / 0
один и тот же select внутри функций.. разное время
    #35079015
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4_AlexСпасибо конечно, но без "слабо" было бы лучше Правила форума на SQL.RU (v1.0)

Рекомендуется:
Перед публикацией сообщений посмотреть, нет ли ответа на ваш вопрос в ... архивах форума.

4_Alexя кстати так и не увидел в сслыках по поиску причину "торможения" запроса, там только понято что планер работает по разному (это я и сам интуитивно понимал). А вот почему? ... закономерность повторяеться практически на ВСЕХ запросах где много данных и есть индексы."планер работает по разному" => получаются разные планы запросов => они выполняются разное время.

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

4_AlexМожно конечно сказать что всё зависит от запроса, и надо исследовать проблему на конкретном примере+1
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / один и тот же select внутри функций.. разное время
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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