PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

PostgreSQL заявката е бавна, когато се използва NOT IN

get_customer_trans() не е таблица - вероятно някаква съхранена процедура, така че заявката не е наистина тривиална. Трябва да погледнете какво наистина прави тази съхранена процедура, за да разберете защо може да работи бавно.

Въпреки това, независимо от поведението на съхранената процедура, добавянето на следния индекс трябва да помогне много:

CREATE INDEX do_not_email_tbl_idx1
    ON do_not_email_tbl(do_not_email_address);

Този индекс позволява NOT IN заявка за бързо връщане на отговор. Въпреки това NOT IN е известно, че има проблеми в по-старите версии на PostgreSQL - затова се уверете, че използвате поне PostgreSQL 9.1 или по-нова версия.

АКТУАЛИЗАЦИЯ . Опитайте да промените заявката си на:

SELECT t.*
FROM get_customer_trans() AS t
WHERE NOT EXISTS (
    SELECT 1
    FROM do_not_email_tbl
    WHERE do_not_email_address = t.user_email
    LIMIT 1
)

Тази заявка не използва NOT IN , и трябва да работи бързо. Мисля, че в PostgreSQL 9.2 тази заявка трябва да работи толкова бързо, колкото тази с NOT IN въпреки това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да запишете низ, съдържащ единични кавички, в текстова колона в PostgreSQL

  2. Дълго време за връзка с Azure Postgres

  3. ECONNREFUSED за Postgres на nodeJS с докери

  4. Как да получите достъп до db изгледи с помощта на модели на Laravel?

  5. Импортиране на .csv с колона за време (dd.mm.yyyy hh.mm.ss) с помощта на psql \copy