Estoy usando sqlalchemy (lenguaje de expresión, no completo ORM) con MySQL y experimentando una lentitud inesperada. Particularmente, el tiempo dedicado a realizar una consulta de selección en sqlalchemy es diez veces mayor que el tiempo dedicado a realizar la misma consulta desde la línea de comandos de mysql.Profiling SQL query
salida de cprofile:
ncalls tottime percall cumtime percall filename:lineno(function)
100 206.703 2.067 206.703 2.067 {method 'query' of '_mysql.connection' objects}
tiempo MySQL: 0.26 segundos
El consenso parece ser que hay alguna sobrecarga usando sqlalchemy, pero no casi tanto. ¿Alguna sugerencia sobre qué podría causar un comportamiento como este?
Las consultas son por lo general de la forma:
SELECT fieldnames.minage, fieldnames.maxage, fieldnames.race,
fieldnames.sex, sum(pop.population) AS pop, pop.zip5
FROM pop
INNER JOIN fieldnames ON fieldnames.fieldname = pop.fieldname_id
WHERE fieldnames.race IN ("White alone")
AND fieldnames.sex IN ("Female")
AND fieldnames.maxage >=101
AND fieldnames.minage <=107
GROUP BY fieldnames.minage, fieldnames.maxage
Asegúrese de no ejecutar la consulta en MySQL inmediatamente después de que sqlalchemy lo ejecute, o el resultado estará en la memoria caché de consultas. Si la memoria sirve, RESET QUERY CACHE borra todo. No debería haber tanta diferencia a través de la alquimia sql. – SteveMc
Pensé en el almacenamiento en caché justo después de publicar la pregunta. Estoy jugando con borrar el caché, pero los resultados preliminares indican que ese no es el problema. – AAmeliorant
Problemas de red: si ejecuta MySQL desde la línea de comando localmente pero el control remoto de su aplicación, eso podría generar retrasos, pero tendría que ser una gran cantidad de datos y/o una red lenta. La información de perfil prácticamente descarta todo lo que sqlalchemy podría estar haciendo. – SteveMc