powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странный план выполнения. Помогите понять
3 сообщений из 3, страница 1 из 1
Странный план выполнения. Помогите понять
    #39995615
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для запроса в котором параметры p_oper_ids, p_start_ts, p_oper_type все NULLs
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select eo.* 
 from Oper eo
where eo.partnerid = :p_partner_id
  and (:p_oper_ids is not null and eo.transactionid = any(:p_oper_ids)
       or :p_start_ts is not null and eo.transactiondate >= :p_start_ts)
  and eo.statusid = 1
  and (:p_oper_type is null or :p_oper_type = ''
       or :p_oper_type = 'order'  and eo.TransactionTypeId = 1
       or :p_oper_type = 'refund' and eo.TransactionTypeId in (2,3))
order by eo.transactiondate
limit :rows_limit;


получаю такой странный план, котрый ничего не показывает

QUERY PLAN
-------------------------------------------------------
Limit (cost=0.01..0.02 rows=1 width=3728)
-> Sort (cost=0.01..0.02 rows=0 width=3728)
Sort Key: transactiondate
-> Result (cost=0.00..0.00 rows=0 width=3728)
One-Time Filter: false

Если убрать строки с незначащими параметрами, то получаю нормальный привычный план
Код: sql
1.
2.
3.
4.
5.
6.
select eo.* 
 from Oper eo
where eo.partnerid = :p_partner_id
  and eo.statusid = 1  
order by eo.transactiondate
limit :rows_limit;



QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
Limit (cost=0.41..271.18 rows=100 width=779)
-> Index Scan using opertransactiondate_idx on oper eo (cost=0.41..4489.75 rows=1658 width=779)
Filter: (((partnerid)::text = 'c5a2'::text) AND (statusid = 1))

Как понимать первый план? Не встречал раньше такого
...
Рейтинг: 0 / 0
Странный план выполнения. Помогите понять
    #39995640
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос снимается. При данных значениях параметров запрос просто ничего не должен возвращать.
...
Рейтинг: 0 / 0
Странный план выполнения. Помогите понять
    #39995646
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kr_Yury,

One-Time Filter - планировщик увидел ни от чего не зависящее условие и выкинул всё дальнейшее дерево, заменив константой.

В частности,
Код: plaintext
1.
  and (:p_oper_ids is not null and eo.transactionid = any(:p_oper_ids)
       or :p_start_ts is not null and eo.transactiondate >= :p_start_ts)
При p_oper_ids и p_start_ts получаем and (false or false) => false всего where, зачем вообще идти в таблицу, можно отдать заведомо 0 строк.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странный план выполнения. Помогите понять
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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