Ротация таблицы
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- kapa6ac
- мл. сержант
- Сообщения: 146
- Зарегистрирован: 2007-09-19 10:33:02
Ротация таблицы
Доброго дня.
Из базы для меня необходимы данные не позднее двухнедельной давности и не хочется чтобы база разрасталась.
Отсюда и вопрос как на автомате удалять устаревшие данные? Искал встроенные функции, что-то такого нет.
Из базы для меня необходимы данные не позднее двухнедельной давности и не хочется чтобы база разрасталась.
Отсюда и вопрос как на автомате удалять устаревшие данные? Искал встроенные функции, что-то такого нет.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- dikens3
- подполковник
- Сообщения: 4856
- Зарегистрирован: 2006-09-06 16:24:08
- Откуда: Нижний Новгород
- Контактная информация:
Re: Ротация таблицы
Завести соответствующее поле (date) и по крону очищать.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
- kapa6ac
- мл. сержант
- Сообщения: 146
- Зарегистрирован: 2007-09-19 10:33:02
Re: Ротация таблицы
Это я понимаю колонка типа timestamp?
так?
И все это счастье положить в крон?
Код: Выделить всё
DELETE FROM t_name WHERE t_stamp = NOW()-INTERVAL 1 WEEK;
И все это счастье положить в крон?
- manefesto
- Группенфюррер
- Сообщения: 6934
- Зарегистрирован: 2007-07-20 8:27:30
- Откуда: Пермь
- Контактная информация:
Re: Ротация таблицы
написать скрипт на баше, хоть на перле.
А в нем уже непосрественно саму операцию удаления.
А в нем уже непосрественно саму операцию удаления.
- kapa6ac
- мл. сержант
- Сообщения: 146
- Зарегистрирован: 2007-09-19 10:33:02
Re: Ротация таблицы
... или лыжи не едут или снег асфальтом покрыли...
Что-то никакой реакции на запрос:
В чем грабли? Ошибок не выдает, просто тупо молчит, выполняется ли он?
Что-то никакой реакции на запрос:
Код: Выделить всё
SELECT @t:=NOW() - INTERVAL 1 WEEK;
DELETE FROM t_name WHERE t_stamp < @t;
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Ротация таблицы
Код: Выделить всё
mysql> SELECT NOW(), SUBDATE(NOW(), INTERVAL 1 WEEK);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'WEEK)
' at line 1
mysql> SELECT NOW(), SUBDATE(NOW(), INTERVAL 14 DAY);
+---------------------+---------------------------------+
| NOW() | SUBDATE(NOW(), INTERVAL 14 DAY) |
+---------------------+---------------------------------+
| 2008-08-29 12:33:25 | 2008-08-15 12:33:25 |
+---------------------+---------------------------------+
1 row in set (0.00 sec)
mysql>
Код: Выделить всё
mysql> SELECT version();
+------------+
| version() |
+------------+
| 4.1.15-max |
+------------+
1 row in set (0.00 sec)
mysql>
- kapa6ac
- мл. сержант
- Сообщения: 146
- Зарегистрирован: 2007-09-19 10:33:02
Re: Ротация таблицы
Код: Выделить всё
mysql> select @t:=subdate(now(),interval 1 day);
+-----------------------------------+
| @t:=subdate(now(),interval 1 day) |
+-----------------------------------+
| 2008-08-28 10:31:17 |
+-----------------------------------+
1 row in set (0.00 sec)
mysql> select @t;
+---------------------+
| @t |
+---------------------+
| 2008-08-28 10:31:17 |
+---------------------+
1 row in set (0.01 sec)
mysql> delete quick from t_name where t_stamp < @t;
Что не так делаю?
- LMik
- капитан
- Сообщения: 1852
- Зарегистрирован: 2007-07-17 9:14:39
- Откуда: МО
- Контактная информация:
Re: Ротация таблицы
DELETE FROM ТАБЛИЦА WHERE ПОЛЕ_С_ДАТОЙ < NOW()-INTERVAL 1 WEEK;
Последний раз редактировалось LMik 2008-08-29 9:53:53, всего редактировалось 1 раз.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!
Виpус детям не игpушка, не товаpищ и не дpуг!
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Ротация таблицы
выложи
Код: Выделить всё
explain select * from t_name where t_stamp < 1;
- kapa6ac
- мл. сержант
- Сообщения: 146
- Зарегистрирован: 2007-09-19 10:33:02
Re: Ротация таблицы
Код: Выделить всё
mysql> explain select * from rejects where d_time < 1;
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | rejects | ALL | NULL | NULL | NULL | NULL | 528887 | Using where |
+----+-------------+---------+------+---------------+------+---------+------+--------+-------------+
1 row in set, 1 warning (37.73 sec)
mysql>
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Ротация таблицы
полмиллиона записей в принципе немного, но индекса нет, поэтому выборка идёт по всем записям, что не есть харашо. Я бы советовал отказаться от timestamp в пользу date и создать простой индек на это поле, тогда и выборка и удаление записей по дате будут занимать доли секунд.