На столе с более чем 10 миллионами строк, какие из этих UPDATE
утверждений, скорее всего, будут более быстрыми, или это большая часть мухны?Производительность оператора MySQL UPDATE
UPDATE table SET col1 = col2 WHERE col1 IS NULL;
UPDATE table SET col1 = col2 WHERE col1 IS NULL AND col2 IS NOT NULL;
Ни col1
, ни col2
ключи или индексироваться. На самом деле это поля datetime
, если это что-то меняет.
Примечание: Я довольно уверен, что запросы достичь того же результата:
запроса 1. обновит col1
каждый раз, включая настройку его до NULL
если col2 is NULL
.
Запрос 2. обновит col1
только если col2
имеет значение, тем самым оставляя col1
в NULL
если col2 is NULL
.
Они оба изменяют данные таким же образом. Один наборыcol1
к NULL
когда col2 is NULL
, другой листьяcol1
, как NULL
когда col2 is NULL
, но во всех случаях col1
был NULL
, чтобы начать с.
два запроса разные. Оба запроса не будут обновлять одни и те же строки. –
Как @SureshKamrushi говорит, что они не то же самое, логически, но и наблюдение говорит, что первый будет быстрее, поскольку он выполняет меньше проверок, хотя разница в действительной * может быть незначительной. Вы пробовали профилировать их? –
Вы также должны учитывать, сколько из 10 миллионов имеет col2 как NULL. Если у вас есть только 5, у которых col2 не является нулевым, то второй должен быть быстрее, поскольку он не должен делать почти 10 миллионов обновлений. –