Добавление обновленных SQL-запросов - PullRequest
0 голосов
/ 21 сентября 2009

У меня есть скрипт, который обновляется каждую неделю. Я получил предупреждение от моего хостинга, что я перегружал сервер скриптом. Проблема, которую я обнаружил, состоит в том, что я использую слишком много запросов UPDATE (по одному для каждого из моих 8000+ пользователей).

Это плохое кодирование, я знаю. Поэтому теперь мне нужно объединить все данные в один SQL-запрос и обновить все сразу. Я надеюсь, что это решит мою проблему.

Быстрый вопрос. Если я добавлю чисто добавить запросы UPDATE, разделенные точкой с запятой, как это:

UPDATE table SET something=3 WHERE id=8; UPDATE table SET something=6 WHERE id=9;

А затем обновите базу данных одним большим кодом SQL, в отличие от запросов к базе данных для каждого обновления, это будет быстрее, верно?

Это лучший способ "связать" вместе операторы UPDATE? Значительно ли это уменьшит нагрузку на сервер?

Ответы [ 4 ]

2 голосов
/ 21 сентября 2009

Создайте файл с разделителями со своими значениями и используйте ваш эквивалент MySQL LOAD DATA INFILE . Это будет значительно быстрее, чем ОБНОВЛЕНИЕ.

LOAD DATA INFILE '/path/to/myfile'
REPLACE INTO TABLE thetable(field1,field2, field3)
//optional field and line delimiters
;
1 голос
/ 21 сентября 2009

Лучше всего группировать эти утверждения по полю "что-то":

UPDATE table SET something=3 WHERE id IN (2,4,6,8)
UPDATE table SET something=4 WHERE id IN (1,3,5,7)

Конечно, ничего не зная о ваших требованиях, вероятно, есть лучшее решение ...

0 голосов
/ 12 декабря 2016

Любопытство SQL заключается в том, что следующее целочисленное выражение (1 -abs (знак (A - B))) = 1, если A == B и 0 в противном случае. Для удобства назовем это выражение _eq (A, B). Так

обновить таблицу установить что-то = 3 * _eq (id, 8) + 6 * _eq (id, 9) где id в (8,9);

будет делать то, что вы хотите с одним оператором обновления.

0 голосов
/ 21 сентября 2009

Это улучшит IO, так как существует только одна передача туда и обратно, но «усилие» базы данных будет таким же.

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