sql >> Databáze >  >> RDS >> Mysql

Když používáte Symfony's ACL, je lepší použít dotaz JOIN nebo dotaz pole IN?

Podívejme se na časovou složitost pro oba případy:

V ARRAY APPROACH: Tabulka entit s M rows , s polem položek ACL o size N (řádky v tabulce ACL zde nejsou relevantní)

ČASOVÁ SLOŽITOST :O[N*log(M)]

PŘIPOJENÍ SE: Tabulka entit s M rows s tabulkou ACL s N rows

ČASOVÁ SLOŽITOST :O[M + N]

V praxi máme obecně situaci jako,

V POLE

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

PŘIPOJIT SE

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

A teoreticky by nejhorší scénář pro in array byl

V POLE

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

PŘIPOJIT SE

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

Co to znamená? Souhrn/TL;DR

Pokud je každému uživateli udělen přístup pouze ke zlomku objektů v entitě, použijte pole IN.

Pokud bude mít každý uživatel záznam ACL pro každý objekt entity, použijte JOIN. I když zisky nebudou o několik řádů (pokud nemáte biliony produktů), možná budete chtít použít pole IN.

V obou případech používejte ACL pouze v nezbytně nutných případech! Voliči FTW!




  1. Zakázat konkrétní řádek v JTable pomocí dat z databáze

  2. Existuje způsob, jak zachovat vztah db (pk/fk) v následujícím scénáři

  3. Shromažďování přírůstkových statistik v 11g

  4. Aktualizujte tabulku db pomocí INT