PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL CROSS JOIN lập chỉ mục cho hiệu suất

Vấn đề chính của bạn là OR - bạn không bao giờ có được hiệu suất tốt miễn là bạn có OR như thế này trong WHERE của bạn mệnh đề.

Viết lại truy vấn như sau:

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

Sau đó, hãy đảm bảo rằng bạn có các chỉ mục sau (ngoài các chỉ mục trên 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);

Điều đó sẽ tạo ra sự khác biệt.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị tự động tăng không hoạt động trong PostgreSQL khi sử dụng EntityFramework Core

  2. PostgreSQL nextval và currval trong cùng một truy vấn

  3. Ánh xạ Chế độ xem SQL tới Thực thể jpa ngủ đông

  4. Đang cố gắng thiết lập postgres trên OSX

  5. Heroku Postgres:Kết nối này đã bị đóng