Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

hitungan untuk setiap bergabung - pengoptimalan

Untuk tujuan pengoptimalan, aturan praktis yang baik adalah bergabung lebih sedikit, tidak lebih. Sebenarnya, Anda harus mencoba menggabungkan baris sesedikit mungkin dengan baris sesedikit mungkin. Dengan tambahan bergabung, Anda akan melipatgandakan biaya alih-alih menambah biaya. Karena mysql pada dasarnya hanya akan menghasilkan matriks berlipat ganda. Banyak dari itu yang dioptimalkan oleh indeks dan hal-hal lain.

Tetapi untuk menjawab pertanyaan Anda:sebenarnya mungkin untuk menghitung hanya dengan satu gabungan besar, dengan asumsi tabel memiliki kunci unik dan idalb adalah kunci unik untuk album. Kemudian, dan baru setelah itu, Anda dapat melakukannya seperti kode Anda:

select alb.titreAlb as "Titre",
       count(distinct payalb.idAlb, payalb.PrimaryKeyFields) "Pays",
       count(distinct peralb.idAlb, peralb.PrimaryKeyFields) "Personnages",
       count(distinct juralb.idAlb, juralb.PrimaryKeyFields) "Jurons"
from album alb
left join pays_album payalb using ( idAlb )
left join pers_album peralb using ( idAlb )
left join juron_album juralb using ( idAlb )
where alb.titreAlb = "LES CIGARES DU PHARAON"
group by alb.titreAlb

di mana PrimaryKeyFields adalah singkatan dari bidang kunci utama dari tabel yang digabungkan (Anda harus mencarinya).

Distinct akan menghapus efek yang dimiliki gabungan lainnya pada hitungan. Namun sayangnya, secara umum, distinct tidak akan menghilangkan efek gabungan pada biaya.

Meskipun, jika Anda memiliki indeks yang mencakup semua (idAlb + PrimaryKeyFields) -bidang tabel Anda, itu mungkin secepat solusi asli (karena dapat mengoptimalkan distinct untuk tidak melakukan penyortiran) dan akan mendekati apa yang Anda pikirkan (hanya berjalan melalui setiap tabel/indeks sekali). Tetapi dalam szenario kasus normal atau terburuk, itu harus berkinerja lebih buruk daripada solusi yang masuk akal (seperti solusi SlimGhost) - karena diragukan akan menemukan strategi yang optimal. Tapi bermain-main dengannya dan periksa penjelasannya (dan posting temuannya), mungkin mysql akan melakukan sesuatu yang gila.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungkan dua tabel dalam satu kueri SQL dan buat nilai tanggal menjadi unik

  2. Bagaimana saya tahu kapan wadah mysql buruh pelabuhan saya habis dan mysql siap untuk menerima kueri?

  3. Cara Menghapus Sepenuhnya MySQL 5.7 Dari Windows

  4. Menggunakan MySql dengan Entity Framework 4 dan Code-First Development CTP

  5. Cara Memperbaiki Database MySQL di cPanel