我对MySQL使用sqlalchemy(表达式语言,不是完整的ORM),并且遇到了一些意外的缓慢。特别是,通过sqlalchemy执行select查询花费的时间是从mysql命令行执行相同查询所耗费的时间的十倍。从CPROFILE分析SQL查询
输出:
ncalls tottime percall cumtime percall filename:lineno(function)
100 206.703 2.067 206.703 2.067 {method 'query' of '_mysql.connection' objects}
MySQL的时间:0.26秒
的共识似乎是,有一些开销使用SQLAlchemy的,但几乎没有这么多。任何有关可能导致这种行为的建议?
的查询是通常的形式:为缓慢
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
确保在sqlalchemy运行之后,您不直接在MySQL中运行查询,否则结果将存在于查询缓存中。如果内存提供服务,RESET QUERY CACHE会清除所有内容。通过sql炼金术不应该有太大的区别。 – SteveMc 2011-05-09 19:11:36
我在发布问题后想过缓存。我打算清除缓存,但初步结果表明这不是问题。 – AAmeliorant 2011-05-09 20:20:11
网络问题 - 如果您是从本地运行MySQL而不是应用程序的远程运行,那可能会导致延迟,但它必须是大量数据和/或网络速度较慢。分析信息几乎排除了sqlalchemy可能做的任何事情。 – SteveMc 2011-05-10 15:20:25