mysql - создать индексированный часовой столбец из существующей временной метки - PullRequest
1 голос
/ 01 февраля 2011

У меня есть столбец «updatetime», который является меткой времени («2011-02-01 09:00:51»). Для повышения производительности мне нужно создать индексированный столбец «updatetime_hour» на основе часа метки времени.

Так, например, если бы «updatetime» было «2011-02-01 09:00:51», тогда «updatetime_hour» будет «9».

Я пытаюсь сделать все это в MySQL, хотя PHP также вариант. 60 тыс. + Существующих строк.

Мысли

Ответы [ 2 ]

5 голосов
/ 01 февраля 2011
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 голосов
/ 01 февраля 2011

Чтобы сделать это автоматически каждый раз, когда вы добавляете или обновляете строку, используйте триггеры:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...