我有一個'updatetime'這個時間戳(「2011-02-01 09:00:51」)。出於性能考慮,我需要根據時間戳的小時創建一個索引列'updatetime_hour'。mysql - 從現有時間戳創建索引小時列
因此,例如,如果'updatetime'是「2011-02-01 09:00:51」,那麼'updatetime_hour'將是「9」。
我試圖在mysql中這樣做,儘管PHP也是一個選項。現有的60k +行。
想法?
我有一個'updatetime'這個時間戳(「2011-02-01 09:00:51」)。出於性能考慮,我需要根據時間戳的小時創建一個索引列'updatetime_hour'。mysql - 從現有時間戳創建索引小時列
因此,例如,如果'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
我以爲你說你可以很容易地做到這一點?即不需要問另一個問題? – diagonalbatman 2011-02-01 17:52:20
這是爲了更新現有的60k行,而不是插入新行(這就是我說的我可以輕鬆做到的)。 – themerlinproject 2011-02-01 18:23:08