2015-06-04 39 views
0

我有一個約110k行,20列,沒有索引的talbe。我寫了一個查詢來更新這個表JOIN的9列與另一個有很多索引的表。查詢花了很長時間才能運行。我真的不知道爲什麼。這裏是我的查詢:MySQL更新表需要這麼長的時間

UPDATE tonghop a JOIN testdone b 
ON a.stt = b.stt 
SET a.source = b.source, a.pid=b.pid, a.tenbenhnhan = b.fullname, 
a.orderdoctor=b.orderdoctor, a.specialty = b.specialty, a.rdate = b.rdate, 
a.icd_code = b.icd_code, a.servicegroup = b.servicegroup; 

很感激,如果有人可以幫助

回答

2

的正在執行的查詢是沒有一個WHERE子句,這意味着它會在所有的110K記錄執行,你的加入列「STT」必須在以兩個表索引取得更好的表現。

您應該在列「stt」上添加一個索引。

1

沒有同時在列的索引,連接將是緩慢的。 你很可能迫使MySql讀取每一條110k記錄來檢查它們是否匹配。 使用索引,MySql知道這些記錄的位置,並且可以快速找到它們。

嘗試在tonghop.stt上添加索引。

您也可以嘗試在查詢上運行EXPLAIN,看看它是否確實進行了所謂的「全表掃描」。

https://dev.mysql.com/doc/refman/5.6/en/using-explain.html

+1

只是一個註釋:UPDATE上的EXPLAIN是MySQL 5.6/MariaDB 10的東西,但是UPDATE可以被重寫爲SELECT,它通常在計劃方面幾乎相當 – jkavalik

相關問題