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

Banyak ke Banyak Tabel - Performa buruk

Yang terpenting, Anda memerlukan indeks di playersinclubs(club_id, player_id) . Sisanya adalah detail (yang mungkin masih membuat perbedaan besar).
Anda harus tepat tentang tujuan Anda yang sebenarnya. Anda menulis:

Anda tidak perlu bergabung ke club untuk ini sama sekali:

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

Dan Anda tidak perlu kolom playersinclubs di output juga, yang merupakan keuntungan kecil untuk kinerja - kecuali jika memungkinkan hanya indeks pindai di playersinclubs , maka itu mungkin penting.

Anda mungkin tidak membutuhkan semua kolom player dalam hasil, baik. Hanya SELECT kolom yang benar-benar Anda butuhkan.

PK di player menyediakan indeks yang Anda butuhkan di tabel itu.

Anda memerlukan indeks di playersinclubs(club_id, player_id) , tetapi jangan membuatnya unik kecuali pemain tidak diizinkan untuk bergabung dengan klub yang sama untuk kedua kalinya.

Jika pemain dapat bergabung beberapa kali dan Anda hanya ingin daftar "semua pemain", Anda juga perlu menambahkan DISTINCT langkah untuk melipat entri duplikat. Anda bisa saja:

SELECT DISTINCT p.* ...

Tetapi karena Anda mencoba mengoptimalkan kinerja:lebih murah untuk menghilangkan penipuan lebih awal:

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

Mungkin Anda benar-benar menginginkan semua entri di playersinclubs dan semua kolom tabel juga. Tapi deskripsi Anda mengatakan sebaliknya. Kueri dan indeks akan berbeda.

Jawaban yang terkait erat:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails:Izin Postgres ditolak untuk membuat database di rake db:create:all

  2. Bagaimana saya bisa meninjau semua database dan hibah objek untuk suatu peran?

  3. Pembaruan singa menghapus pengguna 'postgres'. Bagaimana cara mengembalikannya?

  4. izin ditolak mencoba membaca file csv menggunakan JDBC untuk database postgres

  5. Bagaimana Cosd() Bekerja di PostgreSQL