Как оптимизировать оператор UPDATE? - PullRequest
1 голос
/ 29 июня 2011

У меня есть таблица с почти 1 миллионом записей и другая таблица с несколькими сотнями записей.Я хотел бы обновить большую таблицу со значениями из маленькой таблицы следующим образом:

UPDATE tableA ta, tableB tb
SET price=tb.price
WHERE ta.id=tb.id

Используя приведенный выше оператор SQL, запрос занимает очень много времени (более 1 часа).Есть ли способ, который я могу использовать, чтобы сделать эту операцию быстрее?

Вот схема для обеих таблиц.

Таблица A

id         name   descrip   region   price
0          a      abc       def      1.7
1          b      abc       def      2.2
3          c      abc       def      3.4
4          d      abc       def      5.3
....       .      ...       ...      ...
999999     e      abc       def      4.5
1000000    f      abc       def      7.9

Таблица B

id      price
0       0.7
1       2.5
3       1.9
4       7.9

Таблица результатов A

Таблица A

id         name   descrip   region   price
0          a      abc       def      0.7
1          b      abc       def      2.5
3          c      abc       def      1.9
4          d      abc       def      7.9
....       .      ...       ...      ...
999999     e      abc       def      4.5
1000000    f      abc       def      7.9

1 Ответ

2 голосов
/ 29 июня 2011

Если у вашего tableB есть индекс, который охватывает id (очевидно, так оно и есть) - тогда у вас нет других способов ускорить его. Поскольку самая медленная вещь здесь - это физическое изменение значения.

Возможно, вы можете изменить where на:

WHERE ta.id=tb.id and ta.price <> tb.price

, чтобы избежать обновления цены до того же значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...