2010-05-18 4 views
3

Если я хочу, чтобы обновить две строки в таблице MySQL, используя следующие две команды:Объединение двух команд UPDATE - производительность?

UPDATE table SET Col = Value1 WHERE ID = ID1 

UPDATE table SET Col = Value2 WHERE ID = ID2` 

Я обычно объединить их в одну команду, так что я не должен обращаться к серверу MySQL дважды от моего C:

UPDATE table SET Col = IF(ID = ID1 , Value1 , Value2) WHERE ID=ID1 OR ID=ID2 

Действительно ли это увеличение производительности?

Справочная информация: Я использую специально сделанный полностью написанный высокопроизводительный сильно загруженный веб-сервер.

+0

спасибо. это было полезно для меня, и я совмещаю его, как показано ниже. Пример: 'mysql_query (« UPDATE dns SET ns = 1, jenis = IF (data = '$ ns1', '1', '2') WHERE set = '$ set' AND data IN ('$ ns1', '$ NS2') ");' – sg552

ответ

0

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

0

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

0

Да, это будет быстрее, просто потому, что вы делаете одиночную поездку в БД вместо двух. Вероятно, накладные расходы по сетевому вызову будут доминировать над этим запросом типа (запрет на принятие реальных плохих решений оптимизатора на стороне MySQL).

Однако, даже если у вас есть два отдельных оператора UPDATE, вы можете отправить их по одному запросу на задний план, и вы также останетесь со стандартным SQL.

1

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

Однако, возможно, было бы полезно изучить оптимизацию этого конкретного запроса. Условие id = id1 or id = id2 похоже, что оно будет использовать поиск по диапазону (см. OR Relations). Я не совсем уверен, но может привести к сканированию индекса от ID1 до ID2, что может быть дорогостоящим, если они логически «далеко» отделены от индекса. Может быть более эффективным использование оператора IN: where ID in (ID1, ID2). Или, возможно, использовать два отдельных заявления.

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