Я думаю, вы должны сначала упростить ваш запрос. В особенности подвыбор может быть опущен.
Не зная схемы и объема данных, сложно что-либо сказать о соответствующих индексах. Я бы попробовал индексы на pxrefqueuekey
для таблиц t1
до t3
, соответственно, например ::1006
CREATE INDEX t1_pxrefqueuekey_idx ON myschema.t1(pxrefqueuekey);
CREATE INDEX t2_pxrefqueuekey_idx ON myschema.t2(pxrefqueuekey);
CREATE INDEX t3_pxrefqueuekey_idx ON myschema.t3(pxrefqueuekey);
С
EXPLAIN ANALYZE SELECT * FROM myschema.sla WHERE pxinsname NOT IN
(
SELECT pxinsname
FROM myschema.sla
WHERE (
pxinsname IN (SELECT pxrefqueuekey FROM myschema.t1) OR
pxinsname IN (SELECT pxrefqueuekey FROM myschema.t2) OR
pxinsname IN (SELECT pxrefqueuekey FROM myschema.t3)
);
Вы можете увидеть, работают ли индексы. Вы также можете использовать этот запрос без EXPLAIN ANALYZE
, чтобы проверить, удаляет ли мой упрощенный запрос элементы, которые вы хотите удалить.