sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN indexering voor prestaties

Uw grootste probleem is de OR — je kunt nooit fatsoenlijke prestaties krijgen zolang je een OR . hebt zoals dit in je WHERE clausule.

Herschrijf de query als volgt:

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','%'));

Zorg er dan voor dat je de volgende indexen hebt (behalve de indexen op de 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);

Dat zou een verschil moeten maken.




  1. bereken de verschillen tussen twee rijen in SQL

  2. #1005 - Kan tabel 'table_name' niet maken (errno:150)

  3. hoe gegevens uit meer dan één tabel op te halen?

  4. codeigniter nodejs en nowjs integratie