2011-02-01 12 views
1

私はタイムスタンプ( "2011-02-01 09:00:51")の列 'updatetime'を持っています。パフォーマンスのために、タイムスタンプの時間に基づいてインデックス付きの列 'updatetime_hour'を作成する必要があります。mysql - 既存のタイムスタンプからインデックスされた時間列を作成する

たとえば、「updatetime」が「2011-02-01 09:00:51」の場合、「updatetime_hour」は「9」になります。

PHPはオプションでもありますが、私はこれをmysqlですべて実行しようとしています。 60k +既存の行

思考?

+0

あなたはこれをかなり簡単に行うことができると思いましたか?つまり別の質問をする必要はありませんか? – diagonalbatman

+0

これは、新しい行を挿入するのではなく、既存の60k行を更新するためのものです(これは私が簡単にできると言いました)。 – themerlinproject

答えて

5
UPDATE yourtable SET updatetime_hour=HOUR(updatetime); 

ピーク時に実行しないでください。しばらく時間がかかります。あなたも、小さなバッチで、それを実行できる - あなたは「影響を受けた0行」を取得するまで、updatetime_hourがNULL可能にし、これを実行し続ける:

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 
+0

これは既存の行には適用されませんが、良い点があります。私は私の票を返すとき+1します。 – Piskvor

関連する問題