Переписать запрос UPDATE без IN, используя INNER JOIN - PullRequest
0 голосов
/ 25 октября 2011

У меня есть запрос:

UPDATE table_1 set field_1 = 1 where field_2 IN 
(SELECT field_2 from table_2 where field_3 = 1)

Однако это занимает ДЛИННОЕ время с большой базой данных (> 2000 мс). Есть ли способ переписать этот запрос, используя JOINs, чтобы уйти от использования IN?

ПРИМЕЧАНИЕ. Индексы field_1 и field_3 имеются, однако это не помогает запросу. Это использует MySQL.

Ответы [ 3 ]

1 голос
/ 25 октября 2011
UPDATE table_1, table_2
    SET table_1.field_1 = 1
    WHERE table_1.field_2 = table_2.field_2
        AND table_2.field_3 = 1
0 голосов
/ 25 октября 2011

Протестировал этот код.

UPDATE table_1 t1 
 INNER JOIN table_2 t2 
  SET t1.field_1 = 1
WHERE t1.field_2 = t2.field_2
AND t2.field_3 = 1;

Ура! * * 1004

0 голосов
/ 25 октября 2011

Требуемый код указан ниже,

UPDATE t1 
set field_1 = 1 
from table_1 t1
join table_2 t2
    on t1.field_2 = t2.field_2
where t2.field_3 = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...