У меня есть две таблицы. Первый имеет 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 записей и около 45 000 записей в tblZip.
Я действительно не очень много знаю об индексах, но какой будет правильный синтаксис SQL для создания индекса, который ускорит это?
Можете ли вы разместить свою структуру таблицы? Какие индексы существуют прямо сейчас? Вероятно, вам нужны индексы на 'tblRentals.List_Zip' и' tblZip.Zip' – Galz
'tblZip' имеет индекс в' zip'. 'tblRentals' имеет индекс в' Payment_Plan', 'List_City'. В «List_Zip» он отсутствует. – user3088951
ОК. Чтобы ускорить JOIN, вам также нужен индекс на 'tblRentals.List_Zip'. Кроме того, я не уверен, что вы действительно хотите «LEFT JOIN» здесь. Что вы хотите получить для почтовых индексов, которые не существуют в 'tblZip'? С 'LEFT JOIN' вы получите NULL для' tblRentals.List_City' для таких почтовых индексов ... Если вы используете 'JOIN', индекс на' tblRentals.Payment_Plan' также поможет. – Galz