分析SQL查询

2024-09-28 01:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MySQL中使用了sqlalchemy(表达式语言,不是完整的ORM)并遇到了一些意外的缓慢。特别是,在bysqlalchemy中执行select查询所花费的时间是从mysql命令行执行相同查询所花费时间的10倍。在

来自cprofile的输出:

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会有一些开销,但不会太多。有什么建议可以导致这样的行为吗?在

查询的形式通常是:

^{pr2}$

Tags: 命令行语言sqlalchemy表达式时间mysqlormselect
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:33

速度慢的一个可能原因是sql炼金术使用了准备好的语句吗?如果是,那么您可能会遇到性能差异的一个原因是mysql优化器在创建两个查询计划时有不同的信息。在

当您从命令行运行查询时,mysql优化器有一个完整的查询,其中填充了所有where子句值(如上面3所示),因此可以显式地优化这些值。在

当您从sql alchemy运行时,mysql优化器可能只看到这一点(也许字段名.race以及字段名.sex也是参数化的):

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 >= ?
AND fieldnames.minage <= ?
GROUP BY fieldnames.minage, fieldnames.maxage

然后,您可以猜测优化器可能使用的值。不幸的是,这可能是一个错误的猜测,因此在最坏的情况下,创建一个查询计划,使查询的运行速度大大低于预期。在

相关问题 更多 >

    热门问题