sql >> Database >  >> RDS >> Mysql

Als u de ACL van Symfony gebruikt, is het dan beter om een ​​JOIN-query of een IN-arrayquery te gebruiken?

Laten we eens kijken naar de complexiteit van de tijd voor beide gevallen:

IN ARRAY-BENADERING: Entiteitstabel van M rows , met ACL-invoerreeks van size N (rijen in de ACL-tabel zijn hier niet relevant)

TIJDCOMPLEXITEIT :O[N*log(M)]

DOEN AAN BENADERING: Entiteitstabel van M rows , met ACL-tabel van N rows

TIJDCOMPLEXITEIT :O[M + N]

In de praktijk hebben we over het algemeen een situatie als,

IN ARRAY

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

DOE MEE

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

En in theorie zou het worstcasescenario voor in array zijn

IN ARRAY

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

DOE MEE

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

Wat betekent dit? Samenvatting/TL;DR

Als elke gebruiker slechts toegang krijgt tot een fractie van de objecten in een entiteit, gebruik dan IN-array.

Als elke gebruiker een ACL-vermelding heeft voor elk object van een entiteit, gebruikt u JOIN. Hoewel de winst niet van verschillende ordes van grootte zal zijn (tenzij je biljoenen producten hebt), wil je misschien toch IN-array gebruiken.

Gebruik in beide gevallen ACL alleen wanneer dit absoluut noodzakelijk is! Kiezers FTW!




  1. Slechte praktijken bij het ontwerpen van databases

  2. Gegevens voor elk uur ophalen in MySQL

  3. Waarom nosql met cassandra in plaats van mysql?

  4. Kan geen verbinding maken met MySQL in NetBeans IDE