sql >> Base de Datos >  >> RDS >> Mysql

Al usar la ACL de Symfony, ¿es mejor usar una consulta JOIN o una consulta de matriz IN?

Veamos las complejidades de tiempo para ambos casos:

ENFOQUE EN ARRAY: Tabla de entidades de M rows , con una matriz de entradas ACL de size N (las filas de la tabla ACL no son relevantes aquí)

COMPLEJIDAD DE TIEMPO :O[N*log(M)]

ENFOQUE DE UNIÓN: Tabla de entidades de M rows , con tabla ACL de N rows

COMPLEJIDAD DE TIEMPO :O[M + N]

En la práctica, generalmente tenemos una situación como,

EN MATRIZ

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

ÚNETE

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

Y en teoría, el peor de los casos para una matriz sería

EN MATRIZ

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

ÚNETE

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

¿Qué significa esto? Resumen/TL;DR

Si a cada usuario solo se le otorga acceso a una fracción de los objetos en una entidad, use la matriz IN.

Si cada Usuario tendrá una entrada de ACL para cada Objeto de una Entidad, use JOIN. Aunque las ganancias no serán de varios órdenes de magnitud (a menos que tenga billones de productos), es posible que desee utilizar la matriz IN.

En ambos casos, ¡use ACL solo cuando sea absolutamente necesario! Votantes FTW!