Индексы в MySQL

База данных MySQL
Есть table, с полями a и b, более 10 млн записей

Стоит задача максимально оптимизировать запрос

UPDATE table SET a = b WHERE a > b

Какие индексы стоит использовать?
  • Вопрос задан
  • 3023 просмотра
Пригласить эксперта
Ответы на вопрос 6
MiXei4
@MiXei4
Если вероятность a > b велика, то возможно лучше будет перед UPDATE вообще отключить индексы и после завершения запроса пересчитать их.
Ответ написан
Комментировать
Kurmunke
@Kurmunke
Лучше проверить на тестовой таблице. Индексы увеличат скорость выборки, но уменьшат скорость update. Так что надо отталкиваться от конкретной ситуации, индексы могут наоборот только замедлить весь процесс.
Ответ написан
Комментировать
AleksDesker
@AleksDesker
Сколько полей оно будет обновлять? Если одно поле меняется из 10млн, то найти нужное поля будет сильно сложнее, чем потом пересчитать нужные индексы для него, т.е. ставить индекс надо на оба.
Ответ написан
Комментировать
@snevsky
Если задача периодическая — то
— добавить поле z которое будет принимать значение 0 если a <= b и 1 в противном случае
— UPDATE table SET a = b WHERE с = 1
Ответ написан
denver
@denver
Например, не выполнять такой запрос вовсе, просто вместо
SELECT a…
запрашивать
SELECT LEAST(a, b)…
Ответ написан
Комментировать
Смотря какие индексы у Вас есть. Обновление индексированного поля требует значительно больше времени, чем не индексированного.

— Если поля a и b не имеют индекс, то обновляемся без всяких телодвижений.
— Если поля a и b имеют индекс, но не ключевые, то используем совет MiXei4. Отключаем индексы на этих полях и обновляем.
— Если поля a и b имеют индекс и ключевые, то единственный возможный способ это ускорить — поэкспериментировать с тестовой базой, а потом подсунуть вместо «боевой». Но сами понимаете, если таблица обновляется часто, этот способ тоже не возможен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы