我有兩個表。第一個網站的用戶輸入了出租物業的City
,State
和Zip
。一些城市名字拼寫錯誤。第二張表幾乎包含美國郵政服務處在美國各城市的所有(但不是全部)Cities
,States
和Zip 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語法是什麼?
你可以發佈你的表結構嗎?現在哪些索引存在?您可能需要'tblRentals.List_Zip'和'tblZip.Zip'上的索引。 – Galz
'tblZip'在'zip'上有一個索引。 'tblRentals'在'Payment_Plan','List_City'上有一個索引。它在'List_Zip'上沒有。 – user3088951
好的。爲了加快JOIN,你還需要'tblRentals.List_Zip'上的索引。另外 - 我不確定你是否真的想要'LEFT JOIN'在這裏。你想得到什麼'tblZip'中不存在的郵政編碼?對於'tblRentals.List_City',對於這樣的郵政編碼,使用'LEFT JOIN'你將得到NULL ...如果你使用'JOIN','tblRentals.Payment_Plan'上的索引也會有很大的幫助。 – Galz