Ротация таблицы

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kapa6ac
мл. сержант
Сообщения: 146
Зарегистрирован: 2007-09-19 10:33:02

Ротация таблицы

Непрочитанное сообщение kapa6ac » 2008-08-28 10:23:34

Доброго дня.
Из базы для меня необходимы данные не позднее двухнедельной давности и не хочется чтобы база разрасталась.
Отсюда и вопрос как на автомате удалять устаревшие данные? Искал встроенные функции, что-то такого нет. :(

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Ротация таблицы

Непрочитанное сообщение dikens3 » 2008-08-28 10:31:41

Завести соответствующее поле (date) и по крону очищать.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
kapa6ac
мл. сержант
Сообщения: 146
Зарегистрирован: 2007-09-19 10:33:02

Re: Ротация таблицы

Непрочитанное сообщение kapa6ac » 2008-08-28 11:19:04

Это я понимаю колонка типа timestamp?

Код: Выделить всё

DELETE FROM t_name WHERE t_stamp = NOW()-INTERVAL 1 WEEK;
так?
И все это счастье положить в крон?

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Ротация таблицы

Непрочитанное сообщение manefesto » 2008-08-29 6:48:46

написать скрипт на баше, хоть на перле.
А в нем уже непосрественно саму операцию удаления.
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
kapa6ac
мл. сержант
Сообщения: 146
Зарегистрирован: 2007-09-19 10:33:02

Re: Ротация таблицы

Непрочитанное сообщение kapa6ac » 2008-08-29 9:08:14

... или лыжи не едут или снег асфальтом покрыли...
Что-то никакой реакции на запрос:

Код: Выделить всё

SELECT @t:=NOW() - INTERVAL 1 WEEK;
DELETE FROM t_name WHERE t_stamp < @t;
В чем грабли? Ошибок не выдает, просто тупо молчит, выполняется ли он?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ротация таблицы

Непрочитанное сообщение zg » 2008-08-29 9:21:55

Код: Выделить всё

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: Ротация таблицы

Непрочитанное сообщение kapa6ac » 2008-08-29 9:35:21

Код: Выделить всё

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;
И на этом уже минут 5 тупит. :(
Что не так делаю?

Аватара пользователя
LMik
капитан
Сообщения: 1852
Зарегистрирован: 2007-07-17 9:14:39
Откуда: МО
Контактная информация:

Re: Ротация таблицы

Непрочитанное сообщение LMik » 2008-08-29 9:49:43

DELETE FROM ТАБЛИЦА WHERE ПОЛЕ_С_ДАТОЙ < NOW()-INTERVAL 1 WEEK;
Последний раз редактировалось LMik 2008-08-29 9:53:53, всего редактировалось 1 раз.
BSD... Join the dark side.
Виpус детям не игpушка, не товаpищ и не дpуг!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ротация таблицы

Непрочитанное сообщение zg » 2008-08-29 9:52:20

выложи

Код: Выделить всё

explain select * from t_name where t_stamp < 1;

Аватара пользователя
kapa6ac
мл. сержант
Сообщения: 146
Зарегистрирован: 2007-09-19 10:33:02

Re: Ротация таблицы

Непрочитанное сообщение kapa6ac » 2008-08-29 10:44:38

Код: Выделить всё

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>

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Ротация таблицы

Непрочитанное сообщение zg » 2008-08-29 15:04:31

полмиллиона записей в принципе немного, но индекса нет, поэтому выборка идёт по всем записям, что не есть харашо. Я бы советовал отказаться от timestamp в пользу date и создать простой индек на это поле, тогда и выборка и удаление записей по дате будут занимать доли секунд.