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

Saat menggunakan ACL Symfony, apakah lebih baik menggunakan kueri GABUNG atau kueri array IN?

Mari kita lihat kompleksitas waktu untuk kedua kasus:

PENDEKATAN DALAM ARRAY: Tabel Entitas dari M rows , dengan larik entri ACL size N (baris dalam tabel ACL tidak relevan di sini)

KOMPLEKSITAS WAKTU :O[N*log(M)]

BERGABUNG DENGAN PENDEKATAN: Tabel Entitas dari M rows , dengan tabel ACL dari N rows

KOMPLEKSITAS WAKTU :O[M + T]

Dalam praktiknya, kita biasanya memiliki situasi seperti,

DAPAT BERURUS

N=10,000
M=1,000,000
O=>60,000

BERGABUNG

N=10,000
M=1,000,000
O=>1,010,000

Dan secara teori, skenario terburuk untuk array adalah

DAPAT BERURUS

N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000

BERGABUNG

N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000

Apa artinya ini? Ringkasan/TL;DR

Jika setiap Pengguna hanya diberikan akses ke sebagian kecil objek dalam entitas, gunakan array IN.

Jika setiap Pengguna akan memiliki entri ACL untuk setiap Objek dari Entitas, gunakan GABUNG. Meskipun keuntungan tidak akan beberapa kali lipat (kecuali Anda memiliki triliunan produk), jadi Anda mungkin masih ingin menggunakan array IN.

Dalam kedua kasus, gunakan ACL hanya jika benar-benar diperlukan! Pemilih FTW!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL secara efisien menyalin semua catatan dari satu tabel ke tabel lainnya

  2. Kutipan tunggal, Kutipan ganda, dan Backtick di MySQL

  3. Perbarui dropdown secara dinamis berdasarkan pilihan sebelumnya dengan PHP PDO

  4. kesalahan sintaks readyStatement

  5. Sintaks MySQL dan Kinerja 'ATAU'