Как эффективно запустить NULLIF (), чтобы начинать только с последнего пустого значения в mysql? - PullRequest
0 голосов
/ 10 апреля 2020
timestamp  column_a column_b
2020       4        alpha
2019       5        ''
2018       ''       beta
2017       8        -1
2016       -1       theta

Я пытаюсь заменить значения с помощью NULLIF () при частом обновлении базы данных mysql. Чтобы уменьшить количество обрабатываемых записей, я хочу узнать последнюю пустую или -1 временную метку. В этом случае я хочу заменить любые пустые строки и -1 на None. И ответ будет 2016. Как лучше всего найти последнюю временную метку, которая в этом случае будет -1? Есть ли лучшие альтернативы для замены значения на None в Mysql?

1 Ответ

0 голосов
/ 15 апреля 2020

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

Насколько я понимаю, вы хотите заменить определенные строки (а именно: пустая строка и «-1») с нулем. Вы хотите делать это очень часто, потому что данные постоянно добавляются в таблицу, и вы хотите позаботиться об этих «недействительных» записях. Вы беспокоитесь о производительности, и с помощью sh вы можете так или иначе заставить СУБД просматривать только новые строки и, таким образом, не читать всю таблицу при каждом обновлении.

Поскольку вы показываете пустую строку в столбец, я предполагаю, что тип столбца является строковым типом (например, VARCHAR). Первым делом, на мой взгляд, стоит подумать, хотите ли вы , чтобы этот столбец был строкой вообще. Если бы это был числовой столбец (например, INT), не было бы пустых строк для начала. Кроме того, -1 всегда будет одним и тем же числом, в то время как строка может иметь начальный или конечный пробел или специальные символы, вы не видите.

Тогда вы, похоже, считаете -1 нежелательным или недействительным. Так зачем же вводить это? Существует два способа избежать таких записей:

  1. Проверочное ограничение , создающее исключение для вставок с недопустимыми данными.
  2. Триггер это автоматически изменяет недопустимое значение на что-то допустимое.

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

...