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!