2016-11-21 78 views
0

我有以下代碼,它從一個表中搜索ID並插入到另一個表中。 GENRETB包含約200萬條記錄,MOVIETB包含約800,000條記錄。代碼工作正常,但速度很慢。需要幫助來優化和改進這段代碼的性能。優化Python代碼以獲得更好的性能

import sqlite3 

conn = sqlite3.connect('movieDB.db') 
print ("Opened database successfully"); 

cursor = conn.execute("SELECT MOVIENAME FROM GENRETB") 

for row in cursor: 
    mname = row[0] 
    print(mname) 
    cursor2 = conn.execute("SELECT ID FROM MOVIETB WHERE MOVIENAME = ?",(mname,)) 
    for row2 in cursor2: 
     mid = row2[0] 
     print(mid) 
     conn.execute ("UPDATE GENRETB SET ID = ? WHERE MOVIENAME = ?",(mid,mname)) 

conn.commit() 
conn.close() 

在此先感謝

+0

顯示數據庫模式,包括任何索引。 –

回答

0

它是緩慢的,因爲內查詢將多次運行。 最終你在python中進行連接。 最好在sql中使用join。

如:

cursor = conn.execute("SELECT GENRETB.MOVIENAME, MOVIETB.MOVIENAME, 
MOVIETB.MID FROM GENRETB JOIN MOVIETB ON MMOVIETB.OVIENAME = GENRETB.MOVIENAME") 

你甚至可以做更新與一個執行的,而不是許多更新。 例如: -

UPDATE GENRETB SET ID = (SELECT MID FROM MOVIETB WHERE MOVIENAME = GENRETB.MOVIENAME) 

也許你必須改變,因爲我不知道你的數據庫。

我不知道是否需要打印mid。如果是的話,你只能查詢,所以它會更快。如果不是,你真的不需要運行循環,只需要一個更新語句。

另一個問題是,這是否是一個好主意,你試圖做什麼。這取決於你的表格之間的關係。