Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy podczas korzystania z listy ACL Symfony lepiej jest użyć zapytania JOIN czy zapytania tablicowego IN?

Przyjrzyjmy się złożoności czasowej w obu przypadkach:

W PODEJŚCIU MASZYNOWYM: Tabela jednostek M rows , z tablicą wpisów ACL o size N (wiersze w tabeli ACL nie mają tutaj znaczenia)

ZŁOŻONOŚĆ CZASOWA :O[N*log(M)]

PODEJŚCIE DOŁĄCZ: Tabela jednostek M rows , z tabelą ACL zawierającą N rows

ZŁOŻONOŚĆ CZASOWA :O[M + N]

W praktyce zazwyczaj mamy do czynienia z sytuacją typu:

W TABLICY

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

DOŁĄCZ

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

I teoretycznie najgorszym scenariuszem dla in array byłoby

W TABLICY

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

DOŁĄCZ

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

Co to oznacza? Podsumowanie/TL;DR

Jeśli każdy użytkownik ma dostęp tylko do części obiektów w jednostce, użyj tablicy IN.

Jeśli każdy Użytkownik będzie miał wpis ACL dla każdego Obiektu Jednostki, użyj JOIN. Chociaż zyski nie będą kilku rzędów wielkości (chyba że masz biliony produktów), więc nadal możesz chcieć użyć tablicy IN.

W obu przypadkach używaj ACL tylko wtedy, gdy jest to absolutnie konieczne! Głosujący 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. Czy pojedyncze instrukcje mysql są atomowe w MyISAM i InnoDB?

  2. Czy relacyjna baza danych może skalować się w poziomie?

  3. Oblicz sumę zapłaconą z wygenerowanej tabeli foreach w codeigniter

  4. Błąd Django 3.x:„mysql.connector.django” nie jest dostępnym zapleczem bazy danych

  5. Instalowanie pdo_mysql na Amazon EC2 z PHP 5.5