sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN indexování pro výkon

Váš hlavní problém je OR — nikdy nemůžete dosáhnout slušného výkonu, pokud máte OR takto ve vašem WHERE doložka.

Přepište dotaz následovně:

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

Pak se ujistěte, že máte následující indexy (kromě indexů na 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);

To by mělo znamenat rozdíl.




  1. Jak čtete sloupec XML v SQL Server 2008?

  2. Jak vytvořit náhodné číslo pro sloupec v mysql s DEFAULT Constraint?

  3. paket volání funkce postgreSQL

  4. Vytvoření profilu pošty databáze v SQL Server (T-SQL)