21.06.2022 03:12
polin11
 
Ускорить простой запрос нужно проверить входят ли ид. записей из массива в таблицу


SQL код:
SELECT ARRAY(
 
SELECT  DISTINCT "Event"
        
FROM "Documents"
        
WHERE "Event" ANY(ARRAY[100565710056647122])
        
LIMIT 3

Для этого запроса такой план.


SQL код:
"Result  (cost=0.93..0.94 rows=1 width=32) (actual time=2.110..2.111 rows=1 loops=1)"
"  Buffers: shared hit=213"
"  InitPlan 1 (returns $0)"
"    ->  Limit  (cost=0.43..0.93 rows=3 width=4) (actual time=0.042..2.100 rows=3 loops=1)"
"          Buffers: shared hit=213"
"          ->  Unique  (cost=0.43..768.10 rows=4542 width=4) (actual time=0.040..2.096 rows=3 loops=1)"
"                Buffers: shared hit=213"
"                ->  Index Only Scan using "
iEvent" on "Documents"  (cost=0.43..748.72 rows=7751 width=4) (actual time=0.039..1.532 rows=7709 loops=1)"
"                      Index Cond: ("
Event" = ANY ('{1005657,1005664,7122}'::integer[]))"
"                      Heap Fetches: 72"
"                      Buffers: shared hit=213"
"Planning time: 0.510 ms"
"Execution time: 2.149 ms" 
Проблема такая, что для ид. 7122 в таблице "Documents" существует записей 7709, достаем эти все записи.
Хотелось бы переписать запрос, чтобы не все записи вытаскивали, а только до первой существующей.
21.06.2022 11:57
vdm
 
Если взять задачу дословно - "входят ли ид. записей из массива в таблицу"
SQL код:
SELECT ARRAY(
 
SELECT id
   FROM unnest
( ARRAY[100565710056647122] ) id
  WHERE exists 
select 1 from Documents where Event id )
); 
Должно быть быстрее.
Часовой пояс GMT +3, время: 03:48.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.