我有一个'updatetime'列,它是一个时间戳(“2011-02-01 09:00:51”)。出于性能目的,我需要根据时间戳的小时创建一个索引列'updatetime_hour'。
例如,如果'updatetime'是“2011-02-01 09:00:51”那么'updatetime_hour'将是“9”。
我试图在mysql中完成所有操作,尽管PHP也是一个选项。 60k +现有行。
思想?
答案 0 :(得分:5)
UPDATE yourtable SET updatetime_hour=HOUR(updatetime);
不要在高峰时段运行,这需要一段时间。您甚至可以以较小的批次运行它 - 使updatetime_hour
可以为空并继续运行它,直到您得到“0行受影响”:
UPDATE yourtable SET updatetime_hour=HOUR(updatetime)
WHERE updatetime_hour IS NULL LIMIT 1000;
答案 1 :(得分:3)
要在每次添加或更新行时自动执行此操作,请使用触发器:
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