2012-06-11 3 views
0

У меня есть запрос, как это:Улучшение производительности подзапроса `Update`?

UPDATE table1 SET status = 'ANSWERED' WHERE table1.number IN (select table2.number from table2) 

Необходимо обновить status отвеченные если table1.number уже существует в table2.number

Он принимает навсегда и до сих пор висит ..

В таблице table1 , 300 000 строк.

В таблице table2 24 000 рядов.

table1.number и table2.number - это уникальные номера.

Как улучшить производительность?

+0

Используйте соединения вместо IN, чтобы использовать индексы, отключать ключи перед ключами запроса/включения после запроса. – Pentium10

ответ

3

Создайте индекс в полях table1.number и table2.number и используйте следующий запрос.

UPDATE table1 
     INNER JOIN table2 
       ON table1.number = table2.number 
SET table1.status = 'ANSWERED' 
Смежные вопросы