Если вы хотите сделать вашу базу данных масштабируемой, лучшим подходом будет добавление нового столбца LATESTDATE
вместе с триггером вставки / обновления, который устанавливает его в самое последнее из двух полей-кандидатов, используя, например, наибольший .
Запуск функций на ряд для ваших селекторов очень быстро замедляется по мере увеличения таблицы. Если вы хотите, чтобы производительность оставалась работоспособной по мере роста таблицы, этот прием часто встречается.
Технически это нарушает 3NF, так как дублирует одну из дат, но нарушение допустимо по соображениям производительности, и вы все еще поддерживаете свойства ACID, потому что триггеры диктуют, что столбцы остаются согласованными.
Я не знаю синтаксиса триггера MySQL, но я бы сделал что-то вроде:
- Создайте новый столбец, установив для него подходящее значение по умолчанию.
- Создайте триггеры вставки / обновления, чтобы гарантировать, что изменения будут отражены.
- Дотроньтесь до всех строк с помощью запроса, например
update TBL set ADDDATE = ADDDATE
, чтобы триггер сработал для всех текущих строк.
Преимущество этого решения заключается в том, что оно переносит стоимость вычислений на то время, когда данные изменяются, не каждый раз, когда вы запрашиваете базу данных. Это амортизирует стоимость всех операций чтения, делая ее более эффективной (если только вы не один из тех очень редких зверей, в которых таблица пишется чаще, чем чтение).
Имейте в виду, что в этом нет необходимости, если размер вашей таблицы относительно небольшой - я работаю в средах, где таблицы действительно огромные.