PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie PostgreSQL działa wolno, gdy używasz NOT IN

get_customer_trans() nie jest tabelą - prawdopodobnie jakaś procedura składowana, więc zapytanie nie jest tak naprawdę trywialne. Musisz sprawdzić, co naprawdę robi ta procedura składowana, aby zrozumieć, dlaczego może działać wolno.

Jednak niezależnie od zachowania procedury składowanej dodanie następującego indeksu powinno bardzo pomóc:

CREATE INDEX do_not_email_tbl_idx1
    ON do_not_email_tbl(do_not_email_address);

Ten indeks pozwala NOT IN zapytanie, aby szybko zwrócić odpowiedź. Jednak NOT IN wiadomo, że mają problemy ze starszymi wersjami PostgreSQL - więc upewnij się, że używasz co najmniej PostgreSQL 9.1 lub nowszego.

AKTUALIZUJ . Spróbuj zmienić zapytanie na:

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
)

To zapytanie nie używa NOT IN , i powinno działać szybko. Myślę, że w PostgreSQL 9.2 to zapytanie powinno działać tak szybko, jak to z NOT IN chociaż.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO otrzymuje ułamki sekund od Postgres

  2. Jak usunąć duplikaty, które są generowane za pomocą funkcji postgres array_agg?

  3. Czy ograniczenie Postgres UNIQUE implikuje indeks?

  4. Szesnastkowy UTF16 na tekst

  5. PostgreSQL:Utwórz tabelę, jeśli nie istnieje AS