在python中查询MySQL需要花费大量时间,postgres查询工作正常

时间:2011-09-20 09:52:20

标签: python mysql performance

我正在使用时间分析器来优化我的python脚本。事实证明,mysql查询在我的python脚本中占用了大量时间。总共只有19个查询。根据cPro​​file的报告,这19个mysql查询占用了7.44秒。

以下是完整的脚本足迹,其中包含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 :(得分:3)

您可能忘记了(foreign_key, somecolumn) create an index,导致MySQL需要执行全表扫描才能找到数据。您可以通过EXPLAIN

运行来查看此内容
EXPLAIN SELECT column FROM table WHERE foreign_key = 1 AND somecolumn='val1'

答案 1 :(得分:0)

您是否尝试过启用slow queries log的mysql?

此日志文件列出了数据库引擎执行的所有“慢”查询。从这些信息中,您可以尝试解释查询,看看您是否不需要在正在使用的表上定义特定索引。