sql >> Databasteknik >  >> RDS >> Mysql

När du använder Symfonys ACL, är det bättre att använda en JOIN-fråga eller en IN-matrisfråga?

Låt oss titta på tidskomplexiteten för båda fallen:

INTERVÄLJANDE I ORDNING: Entitetstabell med M rows , med ACL-poster i size N (rader i ACL-tabellen är inte relevanta här)

TIDSKOMPLEXITET :O[N*log(M)]

GÅ MED ATT GÅ MED: Entitetstabell med M rows , med ACL-tabell med N rows

TIDSKOMPLEXITET :O[M + N]

I praktiken har vi i allmänhet en situation som,

I MASSOR

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

GÅ MED

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

Och i teorin skulle det värsta scenariot för in array vara

I MASSOR

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

GÅ MED

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

Vad betyder detta? Sammanfattning/TL;DR

Om varje användare endast beviljas åtkomst till en bråkdel av objekten i en enhet, använd IN-matris.

Om varje användare kommer att ha en ACL-post för varje objekt i en enhet, använd JOIN. Även om vinsterna inte kommer att vara av flera storleksordningar (såvida du inte har biljoner produkter), så kanske du fortfarande vill använda IN array.

I båda fallen, använd endast ACL när det är absolut nödvändigt! Väljare FTW!




  1. Rails Postgres-fråga, väljer endast objekt som visas i alla sökparametrar med associationer

  2. Importera .txt-fil till SQL Server 2008

  3. Oracle:Använder CTE med uppdateringsklausul

  4. postgresql radera partitionstabeller