Обновить или Выбрать - PullRequest
3 голосов
/ 26 марта 2012

Я использую MySQL в качестве базы данных. Мне нужно обновить некоторые данные. Однако данные, возможно, не изменились, поэтому мне может не понадобиться обновлять строку в этом случае.

Я хотел знать, какой из них будет лучше (по производительности):

а) Поиск в таблице, чтобы определить, изменились ли данные. Например, я могу искать по первичному ключу, а затем посмотреть, изменилось ли значение оставшихся полей или нет. Если да, то продолжите с оператором обновления и, если нет, оставьте его.

б) Используйте запрос UPDATE напрямую. Если в данных нет изменений, MySQL автоматически игнорирует их и не обрабатывает обновление данных.

Так, какой из них будет работать лучше в таком случае.

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Из руководства MySQL :

Если вы установите для столбца значение, которое он имеет в данный момент, MySQL заметит это и не обновит его.

Так что сэкономьте время ожидания и оставьте эту задачу MySQL.Он даже скажет вам, сколько строк действительно было затронуто.

0 голосов
/ 26 марта 2012

Если вы используете подход выбора-обновления-обновления, вам нужно заблокировать строку (например, выбрать для обновления), в противном случае вы находитесь в состоянии гонки - строка может быть изменена после того, как вы выбрали и проверили, что она не имеет быть изменены.

Как указал @AndreKR, MySQL не будет выполнять никаких операций записи, если значения одинаковы, поэтому непосредственное использование update быстрее, чем использование 2 запросов.

0 голосов
/ 26 марта 2012

Первые варианты кажутся мне лучше, но в определенном сценарии.

  • Выберите все или несколько строк из таблицы и получите их в наборе результатов
  • Пройдите по результирующему набору, поскольку обход в памяти действительно достаточно быстр, и выберите первичные ключи, записи которых вы хотите обновить, и затем выполните запросы на обновление.

Мне кажется, это сравнительно эффективное решение по сравнению с выполнением запроса на обновление в каждой строке независимо от того, нужно ли вам это делать или нет.

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