Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорить простой запрос 
:(
    Опции темы
polin11
Дата 21.6.2022, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



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

Код


SELECT ARRAY(
 SELECT  DISTINCT "Event"
        FROM "Documents"
        WHERE "Event" = ANY(ARRAY[1005657, 1005664, 7122])
        LIMIT 3
)

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

Код


"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, достаем эти все записи.
Хотелось бы переписать запрос, чтобы не все записи вытаскивали, а только до первой существующей.
PM MAIL   Вверх
Akina
Дата 21.6.2022, 07:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 453



Цитата(polin11 @  21.6.2022,  04:05 Найти цитируемый пост)
Хотелось бы переписать запрос, чтобы не все записи вытаскивали, а только до первой существующей.

Переписывай на WHERE EXISTS - он именно так и поступает.
Кстати, WHERE "Event" IN (1005657, 1005664, 7122) побыстрее будет - накладных расходов меньше. Впрочем, в варианте WHERE EXISTS - пофиг. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.