2010-10-13 120 views
1

SQL的下面很簡單的代碼片段失敗:MySQL的UPDATE語句超時

UPDATE smalltable,bigtable 
SET smalltable.ssn=bigtable.ssn 
WHERE smalltable.last = bigtable.last && smalltable.first = bigtable.first; 

BigTable中有16000多條記錄 - 不是真的那麼大的SQL。小表大約有300個。出於某種原因,這個表述超時(> 30秒)。爲什麼?它看起來很簡單,並且數據不難處理:不是很多重複,短字段(VARCHAR(20))等等。

我做錯了什麼?我只是試圖用bigtable中的簡單(或我想)查找來更新smalltable中的記錄。

編輯:很可能相關:smalltable是一個LOCAL INFILE

+0

你能張貼smalltable和BigTable中創建表?看起來你沒有連接列上的索引(第一個和最後一個)。 – a1ex07 2010-10-13 15:03:46

+0

bigtable有很多不相關的記錄(總共175個),但關鍵的記錄是last和first,它們是VARCHAR(20)和ssn,它們是VARCHAR(16)。小桌子正是這三個領域。 – Charles 2010-10-13 15:07:43

回答

5

你對指數:

smalltable.last, bigtable.last, smalltable.first, bigtable.first 
+1

Doh!刪除我的答案;這個更好。 +1。 – 2010-10-13 15:05:08

+0

這不是我的數據庫,所以我想它已經建立了索引,至少在像bigtable這樣的重要表格上。不,它不是!現在MySQL報告它花了0.000秒。 – Charles 2010-10-13 15:13:16