我正在使用时间分析器来优化我的python脚本。事实证明,mysql查询在我的python脚本中占用了大量时间。总共只有19个查询。根据cProfile的报告,这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}
...
任何人都可以帮我弄清楚原因吗?
由于
答案 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?
此日志文件列出了数据库引擎执行的所有“慢”查询。从这些信息中,您可以尝试解释查询,看看您是否不需要在正在使用的表上定义特定索引。