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

Nhiều đến Nhiều Bàn - Hiệu suất kém

Quan trọng nhất, bạn cần có chỉ mục trên playersinclubs(club_id, player_id) . Phần còn lại là chi tiết (có thể vẫn tạo ra sự khác biệt khá lớn).
Bạn cần phải chính xác về mục tiêu thực tế của mình. Bạn viết:

Bạn không cần tham gia club cho điều này:

SELECT p.* 
FROM   playersinclubs pc
JOIN   player         p ON p.id = pc.player_id
WHERE  pc.club_id = 3;

Và bạn không cần cột playersinclubs ở đầu ra, đây là một mức tăng nhỏ cho hiệu suất - trừ khi nó cho phép chỉ chỉ mục quét trên playersinclubs , thì nó có thể là đáng kể.

Bạn có thể không cần tất cả các cột của player kết quả là. Chỉ SELECT các cột bạn thực sự cần.

PK trên player cung cấp chỉ mục bạn cần trên bảng đó.

Bạn cần một chỉ mục trên playersinclubs(club_id, player_id) , nhưng không làm cho nó trở nên độc đáo trừ khi người chơi không được phép tham gia cùng một câu lạc bộ lần thứ hai.

Nếu người chơi có thể tham gia nhiều lần và bạn chỉ muốn có danh sách "tất cả người chơi", bạn cũng cần thêm DISTINCT bước để gấp các mục trùng lặp. Bạn chỉ có thể:

SELECT DISTINCT p.* ...

Nhưng vì bạn đang cố gắng tối ưu hóa hiệu suất nên sẽ rẻ hơn nếu loại bỏ sớm các hành vi gian lận:

SELECT p.*
FROM  (
   SELECT DISTINCT player_id
   FROM   playersinclubs
   WHERE  club_id = 3;
   ) pc
JOIN   player p ON p.id = pc.player_id;

Có lẽ bạn thực sự muốn tất cả các mục nhập trong playersinclubs và tất cả các cột của bảng. Nhưng mô tả của bạn nói khác. Truy vấn và chỉ mục sẽ khác nhau.

Câu trả lời có liên quan chặt chẽ:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp PostgreSQL tương đương với KẾT NỐI CỦA Oracle BẰNG ... BẮT ĐẦU VỚI?

  2. Tổng quan về Amazon RDS &Cung cấp Aurora cho PostgreSQL

  3. Lỗi PG COPY:cú pháp nhập không hợp lệ cho số nguyên

  4. Làm cách nào để gửi một số yêu cầu http từ hàm postgresql hoặc trình kích hoạt

  5. Hàm PostgreSQl trả về nhiều tập kết quả động