python - 通过 sqlalchemy 针对 MySql 运行的查询比在数据库控制台上慢得多

标签 python mysql sql sqlalchemy

我有大量针对数据库运行的 SQL 代码。为了使其可读,我将其构造为大量临时表,每次需要运行查询时都会创建这些临时表。

测试这些查询时,我在 Sequel Pro 中针对数据库运行它们,虽然速度不快,但运行大约需要一分钟。

然后,我采用这些相同的查询(其中大部分只是说 CREATE TEMPORARY TABLE x (INDEX(blah)) AS (SELECT somecrazystuff); )并通过 sqlalchemy 在 python 脚本中运行它们,它们接近 15-20分钟。

我不知道为什么会发生这种情况,但这使得使用 python 脚本进行测试变得很尴尬,并且我最终在 Sequel Pro 中完成了大部分开发工作并稍后保存。

有什么想法吗?

最佳答案

第一个想法:将 sqlalchemy 从图中剔除,尝试通过 mysql-python 运行查询。 SQLAlchemy 主要用于构建 SQL 语句,然后通过 mysql-python 刷新这些语句;由于您是手动构建它们,因此请消除可能的开销来源。

第二个是看MySQL服务器在做什么。根据所使用的引擎,您可以将所有查询转储到日志文件(请参阅 http://www.howtogeek.com/howto/database/monitor-all-sql-queries-in-mysql/ ) 或者,如果您使用的是 InnoDB 表,请SHOW ENGINE INNODB STATUS。您希望确保来自 SQLAlchemy 和 Sequel Pro 的查询到达服务器时实际上是相同的。

关于python - 通过 sqlalchemy 针对 MySql 运行的查询比在数据库控制台上慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21374224/

相关文章:

python数据框收入列清理

python - pandas DataFrame 在传递到 kdb+ 时会删除索引(使用 qPython API)

mysql - 我可以对 2 个数据库执行单个查询吗?

sql - 在sql server中查找最大数据

python - 使用 scons 将参数从一个 SConstruct 传递到另一个 SConstruct

javascript - 如何在 Javascript 对象中找到隐藏的属性/方法?

php - 将数组内爆为来自 mysql 查询的逗号分隔字符串

php - php中的粘性下拉框问题

sql - 如何选择每个类别最新的四个项目?

sql - Postgres : integer out of range