Мне нужна помощь, чтобы быстро обновить мою таблицу в MySQL

Table 1     
id | value  
1    0  
2    0  
3    0 ...

Table 2  
t1_id | t2_id  
1       2  
1       3  
3       5 ...

В таблице 1 должно быть около 150 000 строк, а в таблице 2 - около 1,3 миллиона. Мне нужно установить t1.value = 1, когда t1.id существует в таблице 2.

update table1 t1, table2 t2
set value = 1
where t1.id = t2.id;

Без какого-либо отдельного параметра он будет делать много раз для каждого идентификатора, что замедляет обновление всех строк t1.

Любая помощь будет с радостью принята.

0
Herbert Habermann 10 Июл 2017 в 17:11
1
См. stackoverflow.com/questions/15209414/… - использование JOIN может работать быстрее
 – 
ADyson
10 Июл 2017 в 17:15
Спасибо за ответ, но объединение также создает много записей для каждого значения в таблице 1, поэтому оно будет выполнять столько обновлений для каждого идентификатора, не решая проблему.
 – 
Herbert Habermann
10 Июл 2017 в 17:40

2 ответа

Что о:

UPDATE t1
   SET t1.value = 1
  FROM table_t1 t1
 WHERE EXISTS (SELECT 1 
                 FROM table_t2 t2 
                WHERE t2.id = t1.id
               )
1
Esteban P. 10 Июл 2017 в 17:15
Спасибо за ответ, но я получаю синтаксическую ошибку: 'from' недопустимый ввод в этой позиции
 – 
Herbert Habermann
10 Июл 2017 в 17:29
1
P. без строки FROM, которая работает отлично и за несколько секунд. Большое спасибо !
 – 
Herbert Habermann
10 Июл 2017 в 18:15

Что о:

update table1 
set value=1
from table2
where table1.id=table2.t1_id
0
pisi1001 10 Июл 2017 в 17:32
Спасибо за ответ, решение @Esteban P. отлично работает!
 – 
Herbert Habermann
10 Июл 2017 в 18:17
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода. Также постарайтесь не загромождать свой код пояснительными комментариями, так как это снижает удобочитаемость как кода, так и пояснений!
 – 
Goodbye StackExchange
10 Июл 2017 в 23:53