2014-01-05 34 views
0

我有兩個表。第一個網站的用戶輸入了出租物業的CityStateZip。一些城市名字拼寫錯誤。第二張表幾乎包含美國郵政服務處在美國各城市的所有(但不是全部)Cities,StatesZip codes如何在MYSQL中爲兩個表創建索引

我正在嘗試運行以下SQL語句,以使用美國郵政服務提供的正確名稱更新出租屬性表記錄。但僅限於具有特定「Payment_Plan」的記錄。我將重新使用該語句約15種不同的「Payment_Plan」類型。因此,這將改變的唯一的事情將在「Payment_Plan」給出的值:

UPDATE tblRentals 
LEFT JOIN tblZip 
    ON tblRentals.List_Zip = tblZip.Zip 
    AND tblRentals.Payment_Plan = 'LINX' 
SET tblRentals.List_City = tblZip.City; 

我用的是LEFT JOIN,因爲不是每個郵政編碼是我的版本的美國郵政表,因爲它是幾年舊。

SQL語句需要15秒才能更新200條記錄。我猜這是因爲我需要兩個表之間的某種索引。 tblRentals中有125,000條記錄,tblZip中有約45,000條記錄。

我真的不知道很多關於索引的知識,但是創建一個能夠加速這個索引的索引的正確SQL語法是什麼?

+0

你可以發佈你的表結構嗎?現在哪些索引存在?您可能需要'tblRentals.List_Zip'和'tblZip.Zip'上的索引。 – Galz

+0

'tblZip'在'zip'上有一個索引。 'tblRentals'在'Payment_Plan','List_City'上有一個索引。它在'List_Zip'上沒有。 – user3088951

+0

好的。爲了加快JOIN,你還需要'tblRentals.List_Zip'上的索引。另外 - 我不確定你是否真的想要'LEFT JOIN'在這裏。你想得到什麼'tblZip'中不存在的郵政編碼?對於'tblRentals.List_City',對於這樣的郵政編碼,使用'LEFT JOIN'你將得到NULL ...如果你使用'JOIN','tblRentals.Payment_Plan'上的索引也會有很大的幫助。 – Galz

回答

0

從評論張貼到這樣回答這個問題,可以關閉:

tblRentals.List_Zip添加一個索引。

是的 - 如果你想要在tblRentals中有一個郵政編碼但tblZip中沒有匹配的記錄保持不變,使用INNER JOIN而不是LEFT JOIN

相關問題