Python中的MySQL查询耗时较长,Postgres查询正常

3 投票
2 回答
1167 浏览
提问于 2025-04-17 02:40

我正在使用一个时间分析工具来优化我的Python脚本。结果发现,MySQL查询在我的Python脚本中花费了很多时间。总共有19个查询,这19个MySQL查询的总耗时超过了7.44秒,cProfile是这样报告的。

下面是完整的脚本信息,包括MySQL查询和各自的查询耗时(单位:秒)。

$ python -m cProfile -s time myscript.py 
MYSQL Queries
SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val1'
0.378623008728
SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val2'
0.379124879837
...
SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val19'
0.377450942993

   60122 function calls (59599 primitive calls) in 7.634 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       20    7.440    0.372    7.440    0.372 {method 'query' of '_mysql.connection' objects}
       22    0.025    0.001    0.025    0.001 {method 'execute' of 'psycopg2._psycopg.cursor' objects}
        2    0.008    0.004    0.008    0.004 {method 'commit' of 'psycopg2._psycopg.connection' objects}
     1299    0.007    0.000    0.011    0.000 posixpath.py:59(join)
      982    0.007    0.000    0.007    0.000 {posix.lstat}
      429    0.006    0.000    0.010    0.000 text_file.py:162(readline)
        1    0.006    0.006    0.006    0.006 {psycopg2._psycopg.connect}
        1    0.006    0.006    0.025    0.025 __init__.py:18(<module>)
        2    0.004    0.002    0.007    0.004 connections.py:62(__init__)
      110    0.004    0.000    0.027    0.000 posixpath.py:344(realpath)
       20    0.004    0.000    0.004    0.000 {method 'store_result' of '_mysql.connection' objects}

...

有没有人能帮我找出原因呢?

谢谢!

2 个回答

0

你有没有试过开启 MySQL 的 慢查询日志 呢?

这个日志文件会列出数据库引擎执行的所有“慢”查询。通过这些信息,你可以分析一下这些查询,看看是否需要在你使用的表上定义一个特定的索引。

3

可能是你忘了在 (foreign_key, somecolumn) 上创建一个索引,这导致 MySQL 需要对整个表进行扫描才能找到数据。你可以通过运行 EXPLAIN 来查看这个情况:

EXPLAIN SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val1'

撰写回答