При выполнении следующего запроса иногда требуется 15 секунд, а иногда и 90 минут. Что вызывает эту большую разницу?SQL Query медленно с перерывами в postgres
INSERT INTO missing_products
SELECT table_name,
product_id
FROM products
WHERE table_name = 'xxxxxxxxx'
AND product_id NOT IN (SELECT id
FROM new_products);
Я попробовал объяснить на нем, и единственное, что я могу видеть это index only scan
на новых продуктах. Я также переписал этот запрос вместо левого соединения и вставлял строки, где правая сторона NULL, но это вызывает ту же проблему со временем.
У меня есть следующие таблицы со структурой, что-то вроде следующего.
продукты
id bigint not null,
product_id text not null,
table_name text not null,
primary key (id),
unique index (product_id)
new_products
id text not null,
title text not null,
primary key, btree (id)
missing_products
table_name text not null,
product_id text not null,
primary key (table_name, product_id)
Объяснить - Это имеет дополнительное поле в выражении WHERE, но должно дать хорошее представление. Время заняло 22 секунды.
Insert on missing_products (cost=5184.80..82764.35 rows=207206 width=38) (actual time=22466.525..22466.525 rows=0 loops=1)
-> Seq Scan on products (cost=5184.80..82764.35 rows=207206 width=38) (actual time=0.055..836.217 rows=411150 loops=1)
Filter: ((active > (-30)) AND (NOT (hashed SubPlan 1)) AND (feed = 'xxxxxxxx'::text))
Rows Removed by Filter: 77436
SubPlan 1
-> Index Only Scan using new_products_pkey on new_products (cost=0.39..5184.74 rows=23 width=10) (actual time=0.027..0.027 rows=0 loops=1)
Heap Fetches: 0
Planning time: 0.220 ms
Execution time: 22466.596 ms
любезно предоставит вывод 'EXPLAIN ANALYZE', который поможет нам узнать, есть ли любые триггеры, которые могут вызывать медленность – Akash
@Akash обязательно добавлено –