powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / какова логика выполнения запроса, если есть AND ?
3 сообщений из 3, страница 1 из 1
какова логика выполнения запроса, если есть AND ?
    #34881982
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть запрос с двумя критериями , выполняющийся 20 сек.
Делю его на два, по одному критерию и высняю, что один выполяется 20 сек, второй 2 сек, общий соединенный через AND - 20 сек..Я привел оба и ниже третий сюорный, который мне и нужен.

Можно ли как-то указать серверу, чтобы он не обрабатывал оба критерия полностью?

select node_id, parent_id, node_type, node_subtype
from xprop_turk where
xstring_vector @@ to_tsquery('default','polis & entire')
--and
--xpath_vector @@ to_tsquery('default','4054126')
and creation_date > ('2006-01-01 00:00:00'::timestamp + '1 month'::interval)
and creation_date <= ('2006-03-31 00:00:00'::timestamp) limit 100;
----------------
QUERY PLAN
Limit (cost=0.00..2862.03 rows=100 width=40) (actual time=2410.268..2415.290 rows=100 loops=1)
-> Result (cost=0.00..20520.74 rows=717 width=40) (actual time=2410.266..2415.236 rows=100 loops=1)
-> Append (cost=0.00..20520.74 rows=717 width=40) (actual time=2410.265..2415.174 rows=100 loops=1)
-> Index Scan using xprop_turk_created_idx on xprop_turk (cost=0.00..8.27 rows=1 width=40) (actual time=0.018..0.018 rows=0 loops=1)
Index Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Filter: (xstring_vector @@ '''poli'' & ''entir'''::tsquery)
-> Bitmap Heap Scan on xprop_turk_06 xprop_turk (cost=17708.83..20512.46 rows=716 width=40) (actual time=2410.245..2415.113 rows=100 loops=1)
Recheck Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Filter: (xstring_vector @@ '''poli'' & ''entir'''::tsquery)
-> BitmapAnd (cost=17708.83..17708.83 rows=716 width=0) (actual time=2409.887..2409.887 rows=0 loops=1)
-> Bitmap Index Scan on xprop_turk_xstring_06_idx (cost=0.00..211.66 rows=5565 width=0) (actual time=756.947..756.947 rows=21750 loops=1)
Index Cond: (xstring_vector @@ '''poli'' & ''entir'''::tsquery)
-> Bitmap Index Scan on xprop_turk_06_created_idx (cost=0.00..17496.56 rows=715951 width=0) (actual time=1647.757..1647.757 rows=689342 loops=1)
Index Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Total runtime: 2415.463 ms

-----------------------------------------

select node_id, parent_id, node_type, node_subtype
from xprop_turk where
--xstring_vector @@ to_tsquery('default','polis & entire')
--and
xpath_vector @@ to_tsquery('default','4054126')
and creation_date > ('2006-01-01 00:00:00'::timestamp + '1 month'::interval)
and creation_date <= ('2006-03-31 00:00:00'::timestamp) limit 100;

-----------------------------------------
QUERY PLAN
Limit (cost=0.00..2865.97 rows=100 width=40) (actual time=20848.131..20848.489 rows=100 loops=1)
-> Result (cost=0.00..20549.00 rows=717 width=40) (actual time=20848.129..20848.434 rows=100 loops=1)
-> Append (cost=0.00..20549.00 rows=717 width=40) (actual time=20848.128..20848.389 rows=100 loops=1)
-> Index Scan using xprop_turk_created_idx on xprop_turk (cost=0.00..8.27 rows=1 width=40) (actual time=0.018..0.018 rows=0 loops=1)
Index Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Filter: (xpath_vector @@ '''4054126'''::tsquery)
-> Bitmap Heap Scan on xprop_turk_06 xprop_turk (cost=17737.09..20540.73 rows=716 width=40) (actual time=20848.107..20848.330 rows=100 loops=1)
Recheck Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Filter: (xpath_vector @@ '''4054126'''::tsquery)
-> BitmapAnd (cost=17737.09..17737.09 rows=716 width=0) (actual time=20847.506..20847.506 rows=0 loops=1)
-> Bitmap Index Scan on xprop_turk_xpath_06_idx (cost=0.00..239.92 rows=5565 width=0) (actual time=19129.856..19129.856 rows=4703949 loops=1)
Index Cond: (xpath_vector @@ '''4054126'''::tsquery)
-> Bitmap Index Scan on xprop_turk_06_created_idx (cost=0.00..17496.56 rows=715951 width=0) (actual time=1647.505..1647.505 rows=689342 loops=1)
Index Cond: ((creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
Total runtime: 20848.653 ms

------------------------полный запрос
explain analyze
select node_id, parent_id, node_type, node_subtype
from xprop_turk where
xstring_vector @@ to_tsquery('default','polis & entire')
and
xpath_vector @@ to_tsquery('default','4054126')
and creation_date > ('2006-01-01 00:00:00'::timestamp + '1 month'::interval)
and creation_date <= ('2006-03-31 00:00:00'::timestamp) limit 100;

---------------------------------------
QUERY PLAN
Limit (cost=0.00..484.17 rows=2 width=40) (actual time=20383.109..20389.889 rows=100 loops=1)
-> Result (cost=0.00..484.17 rows=2 width=40) (actual time=20383.107..20389.838 rows=100 loops=1)
-> Append (cost=0.00..484.17 rows=2 width=40) (actual time=20383.106..20389.770 rows=100 loops=1)
-> Index Scan using xprop_turk_xstring_idx on xprop_turk (cost=0.00..8.28 rows=1 width=40) (actual time=0.016..0.016 rows=0 loops=1)
Index Cond: (xstring_vector @@ '''poli'' & ''entir'''::tsquery)
Filter: ((xstring_vector @@ '''poli'' & ''entir'''::tsquery) AND (xpath_vector @@ '''4054126'''::tsquery) AND (creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
-> Bitmap Heap Scan on xprop_turk_06 xprop_turk (cost=451.83..475.89 rows=1 width=40) (actual time=20383.088..20389.710 rows=100 loops=1)
Filter: ((xstring_vector @@ '''poli'' & ''entir'''::tsquery) AND (xpath_vector @@ '''4054126'''::tsquery) AND (creation_date > '2006-02-01 00:00:00'::timestamp without time zone) AND (creation_date <= '2006-03-31 00:00:00'::timestamp without time zone))
-> BitmapAnd (cost=451.83..451.83 rows=6 width=0) (actual time=20382.280..20382.280 rows=0 loops=1)
-> Bitmap Index Scan on xprop_turk_xstring_06_idx (cost=0.00..211.66 rows=5565 width=0) (actual time=763.616..763.616 rows=21750 loops=1)
Index Cond: (xstring_vector @@ '''poli'' & ''entir'''::tsquery)
-> Bitmap Index Scan on xprop_turk_xpath_06_idx (cost=0.00..239.92 rows=5565 width=0) (actual time=19613.115..19613.115 rows=4703949 loops=1)
Index Cond: (xpath_vector @@ '''4054126'''::tsquery)
Total runtime: 20390.070 ms
...
Рейтинг: 0 / 0
какова логика выполнения запроса, если есть AND ?
    #34884472
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?
неужели оба подмножества обрабатываются полностью?
...
Рейтинг: 0 / 0
какова логика выполнения запроса, если есть AND ?
    #34884838
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Winnipuhнеужели оба подмножества обрабатываются полностью?видимо каждый BitmapIndexScan отрабатывает полностью (без учета limit).

этап BitmapAnd (относительно быстрый) и последующие уже работают не более limit.

WinnipuhМожно ли как-то указать серверу, чтобы он не обрабатывал оба критерия полностью?пытаться запинать на другой план. (см. в соседней вашей теме про vacuum analyze)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / какова логика выполнения запроса, если есть AND ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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