За последние 24 часа нас посетили 20084 программиста и 1003 робота. Сейчас ищут 358 программистов ...

Ускорить простой запрос

Тема в разделе "PostgreSQL", создана пользователем polin11, 21 июн 2022.

Метки:
  1. polin11

    polin11 Активный пользователь

    С нами с:
    22 янв 2019
    Сообщения:
    20
    Симпатии:
    0
    Ускорить простой запрос нужно проверить входят ли ид. записей из массива в таблицу


    Код (Text):
    1. SELECT ARRAY(
    2. SELECT  DISTINCT "Event"
    3.         FROM "Documents"
    4.         WHERE "Event" = ANY(ARRAY[1005657, 1005664, 7122])
    5.         LIMIT 3
    6. )
    Для этого запроса такой план.
    Код (Text):
    1. "Result  (cost=0.93..0.94 rows=1 width=32) (actual time=2.110..2.111 rows=1 loops=1)"
    2. "  Buffers: shared hit=213"
    3. "  InitPlan 1 (returns $0)"
    4. "    ->  Limit  (cost=0.43..0.93 rows=3 width=4) (actual time=0.042..2.100 rows=3 loops=1)"
    5. "          Buffers: shared hit=213"
    6. "          ->  Unique  (cost=0.43..768.10 rows=4542 width=4) (actual time=0.040..2.096 rows=3 loops=1)"
    7. "                Buffers: shared hit=213"
    8. "                ->  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)"
    9. "                      Index Cond: ("Event" = ANY ('{1005657,1005664,7122}'::integer[]))"
    10. "                      Heap Fetches: 72"
    11. "                      Buffers: shared hit=213"
    12. "Planning time: 0.510 ms"
    13. "Execution time: 2.149 ms"


    Проблема такая, что для ид. 7122 в таблице "Documents" существует записей 7709, достаем эти все записи.
    Хотелось бы переписать запрос, чтобы не все записи вытаскивали, а только до первой существующей.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Сделай пожалуйста песочницу на https://www.db-fiddle.com/ - там pgsql тоже возможен. Заполни несколько строк чтобы был показательный пример.