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

Khi sử dụng ACL của Symfony, tốt hơn nên sử dụng truy vấn JOIN hay truy vấn mảng IN?

Hãy xem xét sự phức tạp về thời gian cho cả hai trường hợp:

TRONG CÁCH TIẾP CẬN ĐẾN: Bảng thực thể gồm M rows , với mảng mục nhập ACL có size N (các hàng trong bảng ACL không liên quan ở đây)

SỰ LINH HOẠT CỦA THỜI GIAN :O [N * log (M)]

THAM GIA TIẾP CẬN: Bảng thực thể gồm M rows , với bảng ACL gồm N rows

SỰ LINH HOẠT CỦA THỜI GIAN :O [M + N]

Trong thực tế, chúng ta thường gặp một tình huống như,

ĐANG ĐẾN

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

THAM GIA

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

Và theo lý thuyết, trường hợp xấu nhất xảy ra trong mảng sẽ là

ĐANG ĐẾN

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

THAM GIA

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

Điều này có nghĩa là gì? Tổng hợp / TL; DR

Nếu mỗi Người dùng chỉ được cấp quyền truy cập vào một phần nhỏ của các đối tượng trong một thực thể, hãy sử dụng mảng IN.

Nếu mỗi Người dùng sẽ có một mục nhập ACL cho mọi Đối tượng của Thực thể, hãy sử dụng JOIN. Mặc dù lợi nhuận thu được sẽ không lớn theo một số thứ tự (trừ khi bạn có hàng nghìn tỷ sản phẩm), vì vậy bạn có thể vẫn muốn sử dụng mảng IN.

Trong cả hai trường hợp, chỉ sử dụng ACL khi thực sự cần thiết! Người bình chọn 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. làm thế nào để tạo một bộ đếm bài viết php?

  2. làm thế nào để kết nối an toàn với cơ sở dữ liệu google bằng cách sử dụng ip công cộng (0.0.0.0)?

  3. làm cách nào để thiết kế không liên tục qua các điểm cho hành trình du lịch

  4. Kết nối từ xa MySQL không thành công với phương thức xác thực không xác định

  5. Lấy id người dùng hiện tại từ cơ sở dữ liệu để sử dụng trong tabel mới