2014-01-05 4 views
0

У меня есть две таблицы. Первый имеет 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 для создания индекса, который ускорит это?

+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'? С 'LEFT JOIN' вы получите NULL для' tblRentals.List_City' для таких почтовых индексов ... Если вы используете 'JOIN', индекс на' tblRentals.Payment_Plan' также поможет. – Galz

ответ

0

Проводка от комментариев, чтобы ответить на этот вопрос, так что может быть закрыт:

Добавить индекс по tblRentals.List_Zip.

И да - если вы хотите, чтобы записи, имеющие почтовый индекс в tblRentals, но не совпадающие с tblZip, оставались нетронутыми, используйте INNER JOIN, а не LEFT JOIN.

Смежные вопросы