2011-02-01 108 views
1

我有一個'updatetime'這個時間戳(「2011-02-01 09:00:51」)。出於性能考慮,我需要根據時間戳的小時創建一個索引列'updatetime_hour'。mysql - 從現有時間戳創建索引小時列

因此,例如,如果'updatetime'是「2011-02-01 09:00:51」,那麼'updatetime_hour'將是「9」。

我試圖在mysql中這樣做,儘管PHP也是一個選項。現有的60k +行。

想法?

+0

我以爲你說你可以很容易地做到這一點?即不需要問另一個問題? – diagonalbatman 2011-02-01 17:52:20

+0

這是爲了更新現有的60k行,而不是插入新行(這就是我說的我可以輕鬆做到的)。 – themerlinproject 2011-02-01 18:23:08

回答

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; 
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