我有一個包含大約170萬條記錄的mysql表。目標是填寫表中缺失的信息。下面是什麼,我試圖做的僞代碼:優化mysql表更新百萬記錄
SELECT DISTINCT A,B FROM table1
每個值A1,B1從上面的查詢
SELECT C FROM table2 WHERE A LIKE '%A1' AND B LIKE '%B1'
UPDATE table1 SET C=C WHERE A=A1 AND B=B1
不幸的是,問題的本質是,A1價值的零部件和B1在table2列中,所以我不能使用JOIN語句。
有大約0.15萬個獨特的更新必須進行,這將影響170萬條記錄。
我已經分別在表1和表2的列A1,B1上建立索引。
我寫了一個簡單的python腳本來完成上述操作,但是想象一下運行腳本太慢了 - 它現在運行了大約15個小時,只有1/4的工作已經完成。
如何優化mysql中的查詢。這些表使用InnoDB。
您可以使用所需的列和所需的值創建臨時表,並使用此臨時表的聯接進行更新。 – VMai
經過一番研究和實驗後,我發現索引不會用於前導通配符查詢(%value類型的查詢),所以任何優化工作都是徒勞的。幸運的是,對於我來說,我知道屬於前導通配符查詢(覆蓋最多記錄數的查詢)的最重要變體,並且我通過避免使用LIKE子句直接搜索它們。在覆蓋大部分記錄之後,我將其餘記錄複製到另一個表中,並使用LIKE子句來實現我的目標。感謝所有幫助過我的人。 – user1872325