У меня есть две таблицы, назовем их table_A и table_B. Table_A содержит около 10 миллионов строк. Table_B имеет 300 миллионов строк. Я создал индексы для столбцов Table_B X и Y.
Нормально ли, что обновления будут занимать так много времени с количеством строк, которые у меня есть? Мне это кажется очень длинным, учитывая, что у меня есть индекс
Вот как они выглядят
Таблица А:
ID BCODE
1 A1
2 B1
3 C1
4 D1
5 F1
Таблица Б:
X Y IDX IDY
A1 D1
D1 F1
C1 B1
Table_B имеет столбцы «X» и «Y», значения которых находятся в столбце BCODE таблицы Table_A.
Я запускаю два оператора обновления, выполнение которых занимает от 9 до 30 часов.
Update Table_B
join table_A a on table_B.X = a.BCODE
set
table_B.IDX=a.Id ;
Update Table_B
join Table_A aa on table_B.Y = aa.BCODE
set
table_B.IDY = aa.Id ;
Могу ли я как-нибудь ускорить это? Я должен добавить, что столбцы BCODE, X, Y могут иметь длину до 300 символов.
Вот результаты объяснения:
+----+-------------+-----------+------+---------------+-------------+---------+--------------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+-------------+---------+--------------+----------+-------------+
| 1 | SIMPLE | a | ALL | BCODE | NULL | NULL | NULL | 10238784 | NULL |
| 1 | SIMPLE | table_B | ref | relateIndex | relateIndex | 632 | test.a.BCODE | 15 | Using where |
+----+-------------+-----------+------+---------------+-------------+---------+------------+----------+-------------+
2 rows in set (0.00 sec)