PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN mengindeks untuk kinerja

Masalah utama Anda adalah OR — Anda tidak akan pernah bisa mendapatkan kinerja yang layak selama Anda memiliki OR seperti ini di WHERE . Anda klausa.

Tulis ulang kueri sebagai berikut:

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

Kemudian pastikan Anda memiliki indeks berikut (selain indeks pada 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);

Itu akan membuat perbedaan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Komit PostgreSQL Sqlalchemy membutuhkan banyak waktu

  2. Tidak dapat membuka koneksi yang disebabkan oleh Set Hasil ini ditutup

  3. menyapu dibatalkan! Permata::LoadError:Ditentukan 'postgresql' untuk adaptor database

  4. Rencana Toko Kolom

  5. cara menanyakan min atau maks inet/cidr dengan postgres