我有下面的代碼,在那裏我結果的循環從第一查詢中設置 表1中執行另一個查詢查詢太慢具有35K記錄,而表2具有4M嵌套SQL
db = MySQLdb.connect("localhost","root","root","test")
cursor1 = db.cursor(MySQLdb.cursors.DictCursor)
cursor2 = db.cursor(MySQLdb.cursors.DictCursor)
sql = 'select * from table1 limit 2'
cursor1.execute(sql)
results = cursor1.fetchall()
for row in results:
sql2 = 'select * from table2 where t1 = '+row['t1']
cursor2.execute(sql2)
result2 = cursor2.fetchall()
for row2 in result2
#do something
對於每次迭代和每個查詢,這個過程似乎在等待。我嘗試使用cProfile進行分析並獲得以下輸出之一:
ncalls tottime percall cumtime percall filename:lineno(function)
3 21.529 7.176 21.529 7.176 connections.py:274(query)
如何調試此問題?我對Python非常陌生。
爲什麼要運行這樣的嵌套查詢?爲什麼你不能運行一個'連接'查詢? –
你使用索引嗎? – Daniel
請勿手動連接字符串以形成查詢。使用佔位符。 'table2'中的't1'是否被索引?如果沒有,你會執行一些sef掃描。 –