desc - ¿php es mejor que mysql "ordenar por"?
order by mysql php (5)
A veces, si puede evitar el uso de "Uso temporal de filesort", vale la pena, aunque no he realizado pruebas exhaustivas.
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index; Using temporary; Using filesort
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
En lugar de pedir a mysql que clasifique por nombre, en ruby lo hago
results.sort_by {|u| u.name.downcase}
La consulta de mysql resultante ahora es más simple:
1 SIMPLE favorites ref source_id,user2_id source_id 3 const 137 Using index
1 SIMPLE users eq_ref PRIMARY,updated PRIMARY 3 apm.favorites.target_id 1 Using where
Por supuesto, no le conviene hacer esto si devuelve más de unos cientos filas.
Me preguntaba si, en términos de rendimiento y teniendo en cuenta una selección de mysql en una tabla con muy muy muchos (> 1.000.000) registros, es mejor clasificar los resultados con sql "ordenar por" u ordenar los resultados después de la consulta con clasificación de programación clásica Algoritmo ... alguien tiene alguna sugerencia?
Tanques
En el caso hipotético de que realmente consigues los registros en la memoria de tu aplicación, entonces mysql aún le ganará a los pantalones de tu aplicación porque si configuras correctamente tu base de datos NO TENDRÁ que ordenar.
Si desea ordenar por en una tabla de registros de 1 Mio, debe proporcionar en el índice que normalmente se implementaría como un árbol B donde Mysql puede recorrer y obtener los resultados ordenados.
Está comparando un sistema con métodos implementados en C optimizado, destinado a hacer exactamente esta tarea, y otro que va a implementar en un lenguaje de scripting interpretado.
Básicamente, cualquier cosa escrita en C será mucho más rápida que una función equivalente escrita en PHP, por un factor de 10 a 100.
Como ya se señaló, no hay dudas de que es mucho más eficiente configurar su base de datos correctamente y dejar que haga el trabajo.
MySQL ganará. Una razón más además de las otras enumeradas es que, suponiendo que los registros ya estén en la base de datos, no tiene que copiarlos del DB para ordenarlos. Y paginarlos o subindexarlos será fácil y optimizado automáticamente.
En resumen, si el DB PUEDE hacerlo, el DB DEBE hacerlo, casi siempre.
mySQL, sin dudas. Está optimizado para hacer esto y puede usar índices. Esto sería horrible de hacer en PHP (y alcanzaría el memory_limit
rápidamente).