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

Indeksowanie PostgreSQL CROSS JOIN w celu zwiększenia wydajności

Twoim głównym problemem jest OR — nigdy nie uzyskasz przyzwoitej wydajności, jeśli masz OR w ten sposób w swoim WHERE klauzula.

Przepisz zapytanie w następujący sposób:

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

Następnie upewnij się, że masz następujące indeksy (oprócz indeksów w 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 powinno mieć znaczenie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić tylko czas pracy z rezerwacji w PostgreSql?

  2. Heroku Postgresql z Google Datastudio

  3. Konwersja bajtów na podwójną precyzję w PostgreSQL

  4. Boleśnie powolne zapytanie Postgresa używające WHERE w wielu sąsiednich wierszach

  5. Node.js, błąd PostgreSQL:brak wpisu pg_hba.conf dla hosta