Что индексировать в таблицах для запроса, используя 3 IN? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть этот запрос Postgres, используя 3 IN и 1 NOT IN. Можете ли вы предложить, какие столбцы следует индексировать здесь?

DELETE 
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) )  )

1 Ответ

0 голосов
/ 30 августа 2018

Я думаю, вы должны сначала упростить ваш запрос. В особенности подвыбор может быть опущен.

Не зная схемы и объема данных, сложно что-либо сказать о соответствующих индексах. Я бы попробовал индексы на 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, чтобы проверить, удаляет ли мой упрощенный запрос элементы, которые вы хотите удалить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...