2016-12-08 5 views
0

У меня очень длинная таблица, содержащая 10000 строк. 9500 строк имеют столбец устанавливается в 1, а остальные 500 имеют, что столбец устанавливается в 0. Я хочу, чтобы обновить таблицу таким образом, все строки, что столбец установлен в 1.mysql UPDATE, производительность WHERE check vs no check

Будет ли быстрее использовать WHERE столбец = 0 или лучше пропустить ГДЕ и просто ОБНОВИТЬ все? Im используя подготовленное заявление.

  • благодаря
+0

Совет: сделайте выбор как 'SELECT * FROM table WHERE column = 0' теперь добавьте' EXPLAIN', например 'EXPLAIN SELECT * FROM tbale WHERE column = 0', теперь вы можете видеть, насколько тяжел ваш sql, ведьма используются ключи и используются временные таблицы. если каждый из них выглядит нормально (у вас есть ключ, таблица temp не создается), то вы можете ОБНОВЛЯТЬ с WHERE, а также полное обновление таблицы. А записи в таблице 10000 'не очень тяжелые, на 500.000+ вам нужно позаботиться. – JustOnUnderMillions

+0

с индексом в столбце, 10 000 строк будут почти мгновенными в любом случае. – WEBjuju

+0

Вам не нужен индекс в этом столбце. И 10000 не так много. –

ответ

4

Это интересный вопрос. В общем, я бы сказал, что лучше иметь where column = 0. Это никогда не должно быть заметно хуже, но в MySQL это может не повлиять.

Без индекса в столбце, тогда запрос должен будет прочитать все строки в любом случае, чтобы идентифицировать те, которые необходимо обновить. Таким образом, запрос будет выполнять полное сканирование таблицы независимо. Даже с индексом оптимизатор может по-прежнему выбирать полное сканирование таблицы, если у вас нет кластерного индекса на column.

Затем накладные расходы при выполнении обновления поддерживают журнал. Я уверен, что MySQL только регистрирует фактические изменения в базе данных. Другими словами, он все равно проводит сравнение. Таким образом, MySQL не собирается «повторно обновлять» значения до того же значения. Примечание. Не все базы данных ведут себя так.

Все, что сказал, я всегда ставил where column = 0, если это ваше намерение. На 10 000 рядов производительность не является большой проблемой. По моему мнению, четкость кода выше. Кроме того, я пишу код для нескольких баз данных, поэтому предпочитаю писать код, который будет хорошо работать во всех них.

+0

Возможно, это одноразовое обновление, почему проблема здесь? – nomadus

+0

@nomadus. , , Вы должны задать вопрос об этом OP. –

+0

Я знаю Гордона, я надеялся, что он прочитает комментарии. – nomadus

0

С моими измерениями времени выполнения сценария для MariaDB это почти тот же результат с этими запросами (я имею в виду результат & раз).

Я тоже попробую его на MySQL.