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!