mysql - 从现有时间戳创建索引小时列

时间:2011-02-01 17:45:37

标签: php sql mysql database

我有一个'updatetime'列,它是一个时间戳(“2011-02-01 09:00:51”)。出于性能目的,我需要根据时间戳的小时创建一个索引列'updatetime_hour'。

例如,如果'updatetime'是“2011-02-01 09:00:51”那么'updatetime_hour'将是“9”。

我试图在mysql中完成所有操作,尽管PHP也是一个选项。 60k +现有行。

思想?

2 个答案:

答案 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