关于 Python 执行 Sql 语句速度慢的问题。

2018-05-11 10:07:41 +08:00
 zhangjiabin1010
现在有一条多表联合查询 Sql 语句、在 PL/SQL 里执行,需要 100 秒。数据量大概是 9 万条。在 Python 里使用
2010 次点击
所在节点    Python
4 条回复
g8287694
2018-05-11 10:12:19 +08:00
和语言无关,和 sql 有关,为什么明明是 sql 的问题还说语言的问题?
Lycnir
2018-05-11 10:18:13 +08:00
python: 我不背锅
whx20202
2018-05-11 10:25:59 +08:00
建议排查数据库的 slow log 看看数据库端执行时间多长
1. postgresql 这种慢 SQL 日志,会把 python 进程和数据库中间,传数据的时间也包括在内,而你读了 9W 行,这个时间也很恐怖
2. 有时候 SQLalchemy 序列化的性能很低很低,之前搞 OpenStack 性能优化的时候,APM 团队说,我们环境上 99%的时间都在序列化上,你可以考虑上一个 cprofile 看一下。
3. 首先得在数据库端查看执行计划,我觉得你的 SQL 本身可能也有问题

所以:
1. 在数据库中查看执行计划,看看有没有做到读最少的 IO,返回最合适的内容
2. 如果 SQL 没问题,可以考虑在数据库节点用命令行 导出结果,这个时间应该比你看到的慢 SQL 时间短,因为省去了路上的时间,和服务器解析的时间(尤其是用了 ORM 框架的情况下)
3. 也可以考虑上 cprofile
4. 9W 行真的需要吗,有没有可能在数据库里直接聚合一下?
zhangjiabin1010
2018-05-11 10:36:51 +08:00
@whx20202 先感谢解答,我按您的提示思路先去找找解决办法。刚才的问题没有编辑完,您可以看下我新发的帖子 https://www.v2ex.com/t/453985#reply1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453976

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX