我對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