2017-01-17 3 views
1

У меня есть таблица клиентов, которые мне нужно обновить и заменить один столбец (varchar) идентификатором (целое число). Назовем первую таблицу клиентами и вторыми продуктами Итак, вместо того, чтобы иметь varchar (например, Product A), я хочу иметь идентификатор этого продукта (внешний ключ). Произведения находятся в другой таблице, которые имеют идентификатор и PRODUCTNAME:Самый быстрый способ сравнить и обновить строки milion

Я попытался это:

UPDATE customers 
SET s_product = (SELECT id from products WHERE products.productName = customers.s_product) 

Но это занимает looong время и мне нужен быстрый способ сделать это. Также я попытался установить индекс на customers.s_product (BTREE и FULLTEXT), но все же не улучшился.

ответ

2

Создание индексов на обеих таблицах, как

продукции (PRODUCTNAME) & клиентов (s_product)

и выполнить ниже запрос

UPDATE customers t1, products t2 
    SET t1.s_product = t2.id 
    WHERE t1.s_product = t2.productName; 
+0

мне нужен идентификатор, а не название продукта. Так должно быть 'SET t1.s_product = t2.id WHERE t1.s_product = t2.productName' – harunB10

+0

Вы верны, обновили ответ :-) –

+0

Запрос выполняется в течение часа. Нет улучшения скорости по сравнению с моим запросом. :( – harunB10

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