sql >> Database teknologi >  >> RDS >> Mysql

Når du bruger Symfonys ACL, er det så bedre at bruge en JOIN-forespørgsel eller en IN-array-forespørgsel?

Lad os se på tidskompleksiteten for begge tilfælde:

INDEN TILNÆRING: Enhedstabel over M rows , med ACL-indgange i size N (rækker i ACL-tabellen er ikke relevante her)

TIDSKOMPLEKSITET :O[N*log(M)]

KOM MED TILGANG: Enhedstabel over M rows , med ACL-tabel med N rows

TIDSKOMPLEKSITET :O[M + N]

I praksis har vi generelt en situation som,

IN RÆKKE

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

DELTAG

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

Og i teorien ville det værste scenario for in array være

IN RÆKKE

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

DELTAG

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

Hvad betyder det? Resumé/TL;DR

Hvis hver bruger kun får adgang til en brøkdel af objekterne i en enhed, skal du bruge IN-array.

Hvis hver bruger vil have en ACL-indgang for hvert objekt i en enhed, skal du bruge JOIN. Selvom gevinsterne ikke vil være af flere størrelsesordener (medmindre du har billioner af produkter), så vil du måske stadig bruge IN array.

I begge tilfælde må du kun bruge ACL, når det er absolut nødvendigt! Vælgere FTW!




  1. Sådan vælger du mysql-rækker i rækkefølgen af ​​IN-klausulen

  2. Postgres SELECT* FROM table WHERE column-varchar==string-example?

  3. MySQL til Visual Studio installation mislykkes, fejlkode 1603

  4. C#, Entity Framework Core &PostgreSql:indsættelse af en enkelt række tager 20+ sekunder