У меня есть столбец «updatetime», который является меткой времени («2011-02-01 09:00:51»). Для целей производительности мне нужно создать индексированный столбец «updatetime_hour» в зависимости от часа отметки времени.
Так, например, если «updatetime» было «2011-02-01 09:00:51», тогда «updatetime_hour» будет «9».
Я пытаюсь сделать все это в mysql, хотя PHP также является вариантом. 60k + существующие строки.
Мысли?
UPDATE yourtable SET updatetime_hour=HOUR(updatetime);
Не запускайте это в часы пик, это займет некоторое время. Вы даже можете запустить его в меньших партиях – сделайте updatetime_hour
и продолжите выполнение этого, пока не получите «0 строк, затронутых»:
UPDATE yourtable SET updatetime_hour=HOUR(updatetime) WHERE updatetime_hour IS NULL LIMIT 1000;
Чтобы сделать это автоматически каждый раз, когда вы добавляете или обновляете строку, используйте триггеры:
CREATE TRIGGER t1 BEFORE INSERT ON table FOR EACH ROW BEGIN SET NEW.updatetime_hour = HOUR(NEW.updatetime); END CREATE TRIGGER t2 BEFORE UPDATE ON table FOR EACH ROW BEGIN SET NEW.updatetime_hour = HOUR(NEW.updatetime); END