mysql – создать индексированный часовой столбец из существующей метки времени

У меня есть столбец «updatetime», который является меткой времени («2011-02-01 09:00:51»). Для целей производительности мне нужно создать индексированный столбец «updatetime_hour» в зависимости от часа отметки времени.

Так, например, если «updatetime» было «2011-02-01 09:00:51», тогда «updatetime_hour» будет «9».

Я пытаюсь сделать все это в mysql, хотя PHP также является вариантом. 60k + существующие строки.

Мысли?

Solutions Collecting From Web of "mysql – создать индексированный часовой столбец из существующей метки времени"

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