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

Permintaan MySQL untuk teman bersama

Yah, satu-satunya kueri yang mungkin berhasil hingga saat ini adalah milik Simon... tapi itu benar-benar berlebihan - kueri jahat yang begitu rumit (2 subkueri dengan 2 serikat!) untuk hal yang sangat sederhana sehingga Anda perlu memberikan hadiah? :-) Dan jika Anda memiliki lebih dari 1000 pengguna, kueri akan sangat lambat - ingat, ini kuadrat, dan karena penyatuan dalam subkueri, hampir tidak ada indeks yang akan digunakan!

Saya sarankan untuk memikirkan kembali desainnya dan mengizinkan 2 baris duplikat untuk pertemanan:

id  Person1    Person2  status
1         1          2  friend
2         2          1  friend
3         1          3  friend
4         3          1  friend

Anda mungkin berpikir itu tidak efisien tetapi penyederhanaan berikut akan memungkinkan untuk menulis ulang kueri menjadi gabungan sederhana:

select f1.Person2 as common_friend
from friends as f1 join friends as f2
    using (Person2)
where f1.Person1 = '$id1' and f2.Person1 = '$id2' 
    and f1.status = 'friend' and f2.status = 'friend'

yang akan sangat cepat! (Jangan lupa menambahkan indeks untuk Person1,2.) Saya telah menyarankan penyederhanaan serupa (menulis ulang subqueries untuk bergabung) dalam struktur data lain yang sangat buruk dan telah mempercepat kueri dari keabadian hingga sekejap!

Jadi apa yang mungkin terlihat sebagai overhead besar (2 baris untuk satu pertemanan) sebenarnya adalah pengoptimalan besar :-)

Juga, itu akan membuat kueri seperti "temukan semua teman X" jauh lebih mudah. Dan tidak ada lagi hadiah yang perlu dihabiskan :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak Ada Basis Data yang Dipilih - PHP &MySQL

  2. MySQL tidak mendukung klausa batas di dalam subpilihan, bagaimana saya bisa melakukannya?

  3. Laravel 4 memigrasi tabel dasar tidak ditemukan

  4. apa itu java.io.EOFException, Pesan:Tidak dapat membaca respons dari server. Diharapkan untuk membaca 4 byte, membaca 0 byte

  5. python mysql mengambil kueri