sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN-indeksering for ydeevne

Dit hovedproblem er OR — du kan aldrig få en anstændig ydeevne, så længe du har en OR som dette i din WHERE klausul.

Omskriv forespørgslen som følger:

SELECT * FROM main_transaction t 
   JOIN main_profile p ON t.profile_id = p.id
   JOIN main_customer c ON p.user_id = c.id 
WHERE upper(t.request_no) LIKE upper(concat('%','0-90-6 12 ','%'))
UNION
SELECT * FROM main_transaction t 
   JOIN main_profile p ON t.profile_id = p.id
   JOIN main_customer c ON p.user_id = c.id 
WHERE upper(c.phone) LIKE upper(concat('%','0-90-6 12','%'));

Sørg derefter for, at du har følgende indekser (bortset fra indekserne på id). s):

CREATE INDEX ON main_transaction (profile_id);
CREATE INDEX ON main_transaction USING gin (upper(request_no) gin_trgm_ops);
CREATE INDEX ON main_profile (user_id);
CREATE INDEX ON main_customer USING gin (upper(phone) gin_trgm_ops);

Det burde gøre en forskel.




  1. Pymysql Cursor.fetchall() / Fetchone() Returnerer ingen

  2. Konverter streng dd/MM/åååå dato til java.sql.dato åååå-MM-dd

  3. Symfony2-doktrinen opretter forbindelse til databasen via SSL

  4. hvordan man tilføjer mere end 1000 værdier med NOT IN-sætning