powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление из большой базы
42 сообщений из 42, показаны все 2 страниц
Удаление из большой базы
    #38902103
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Попросили помочь обслужить бд. Имеется база данных Mysql размером порядка 180 Gb из этого 130 data и 50 index lenght, rows 840 000 000. Необходимо удалить старые данные.
Сделал процедуру

CREATE DEFINER=`root`localhost` PROCEDURE `name`()
Begin
Declare i int default 0;
while i<1000000 do
DELETE FROM бд.таблица WHERE дата<заданной limit 1000;
set i=i+1;
end while;
end

Работает, но очень медленно и грустно. Порой данные быстрее добавляются, чем удаляются.

Подскажите, как можно еще решить проблему?
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902136
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем такая процедура?
Уж если удалять процедурой, растаскивая процесс по времени - то итерировать надо не по количеству, а по дате, начиная с заведомо более старой, чем у самой старой записи:

Код: sql
1.
2.
3.
4.
5.
SET @date = '2000-01-01';
WHILE @date < 'требуемая дата'
DELETE FROM table WHERE `date` = @date;
SET @date = @date + INTERVAL 1 DAY;
END WHILE;
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902138
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если порция получается великоватой - уменьшить интервал с суток до, скажем, пары часов.
Ну и наличие индекса по дате не повредит.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902142
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Спасибо! Попробую!
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902143
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewer,

Возможно, было бы легче нужные данные скопировать в новую таблицу, а затем дропнуть целиком старую.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902145
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Не совсем понял, как сделать индекс по дате?
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902147
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewerAkina, Не совсем понял, как сделать индекс по дате?А у вас его еще нет???
С индексом, вероятно, и исходный код заработает веселее.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902148
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, думал об этом, но нужных данных примерно 1,5 года, что в размере около 50 gb, даже не представляю сколько времени на Select и Insert надо убить...
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902151
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
подскажите, как его реализовать?
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902153
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewermiksoft, думал об этом, но нужных данных примерно 1,5 года, что в размере около 50 gb, даже не представляю сколько времени на Select и Insert надо убить...Думаю, не больше, чем такое порционное удаление. Кроме того, физически таблица получится куда более "плотная", что положительно скажется на ее дальнейшей жизни.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902207
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и в дополнение к вышесказанному (если уж делать так делать), можно использовать PARTITION BY RANGE, в дальнейшем удалять более старые части ALTER TABLE Tabl DROP PARTITION p0;
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902319
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewerВсем привет! Попросили помочь обслужить бд. Имеется база данных Mysql размером порядка 180 Gb из этого 130 data и 50 index lenght, rows 840 000 000. Необходимо удалить старые данные.
Сделал процедуру

CREATE DEFINER=`root`localhost` PROCEDURE `name`()
Begin
Declare i int default 0;
while i<1000000 do
DELETE FROM бд.таблица WHERE дата<заданной limit 1000;
set i=i+1;
end while;
end

Работает, но очень медленно и грустно. Порой данные быстрее добавляются, чем удаляются.

Подскажите, как можно еще решить проблему?


Без COMMIT в цикле в InnoDB эта процедура бессмысленна (вредна даже).
В MyISAM и с COMMIT, и без него процедура бессмысленна и вредна.
Без индекса по "дата" -- вообще самоубийство.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902333
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftvlrewermiksoft, думал об этом, но нужных данных примерно 1,5 года, что в размере около 50 gb, даже не представляю сколько времени на Select и Insert надо убить...Думаю, не больше, чем такое порционное удаление. Кроме того, физически таблица получится куда более "плотная", что положительно скажется на ее дальнейшей жизни.

Alex_Ustinovну и в дополнение к вышесказанному (если уж делать так делать), можно использовать PARTITION BY RANGE, в дальнейшем удалять более старые части ALTER TABLE Tabl DROP PARTITION p0;

MasterZivvlrewerВсем привет! Попросили помочь обслужить бд. Имеется база данных Mysql размером порядка 180 Gb из этого 130 data и 50 index lenght, rows 840 000 000. Необходимо удалить старые данные.
Сделал процедуру

CREATE DEFINER=`root`localhost` PROCEDURE `name`()
Begin
Declare i int default 0;
while i<1000000 do
DELETE FROM бд.таблица WHERE дата<заданной limit 1000;
set i=i+1;
end while;
end

Работает, но очень медленно и грустно. Порой данные быстрее добавляются, чем удаляются.

Подскажите, как можно еще решить проблему?


Без COMMIT в цикле в InnoDB эта процедура бессмысленна (вредна даже).
В MyISAM и с COMMIT, и без него процедура бессмысленна и вредна.
Без индекса по "дата" -- вообще самоубийство.

Всем спасибо за ответы! Осталось не ясным как проверить есть ли индексы в базе по дате или нет? т.к. база не моя..
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902334
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewer,

Код: sql
1.
show create table XXX;
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902343
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Key 'date_obj' оно?
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902372
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewer,

нет. Оно - это key `rec_date`
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902375
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, MasterZiv,
Руки кривые походу, такой код получился:

CREATE PROCEDURE `db`.`del` ()
BEGIN
SET autocommit=0;
SET @date='2011-01-01';
WHILE @date<'2013-01-01'
DELETE from db.records where REC_DATE = @date;
SET @date = @date + INTERVAL 1 DAY;
END WHILE;
commit;
SET autocommit=1;
END

Ругается на синтаксис
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902385
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewerAkina, MasterZiv,
Руки кривые походу, такой код получился:

CREATE PROCEDURE `db`.`del` ()
BEGIN
SET autocommit=0;
SET @date='2011-01-01';
WHILE @date<'2013-01-01'
DELETE from db.records where REC_DATE = @date;
SET @date = @date + INTERVAL 1 DAY;
END WHILE;
commit;
SET autocommit=1;
END

Ругается на синтаксис

COMMIT должен быть ВНУТРИ цикла.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902387
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SET @date = @date + INTERVAL 1 DAY;



Это ты в оракле такого понахватался ?
Я далеко не уверен, что такое есть в MySQL.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902512
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так у кого-нить есть идея как правильно цикл задать?
BEGIN
SET autocommit=0;
declare sdate DATETIME:
set sdate='2011-01-01 00:00:00'; - ругается на эту
WHILE sdate<'2013-01-01 00:00:00' - ругается на эту
DELETE from db.records where REC_DATE = sdate;
SET sdate = sdate + INTERVAL 1 DAY; - ругается на эту
COMMIT;
END WHILE;

SET autocommit=1;
END

Видимо придется опять в цикл с while i<1000000 do
DELETE FROM бд.таблица WHERE дата<заданной limit 1000;
set i=i+1; но уже с COMMIT
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902529
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Тогда хорошо!)
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902608
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, что у тебя с руками, а?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
mysql> CREATE TABLE `table` (`date` DATETIME);
Query OK, 0 rows affected (0.45 sec)

mysql> INSERT INTO `table`
    -> SELECT '2015-01-01' UNION ALL
    -> SELECT '2015-01-10' UNION ALL
    -> SELECT '2015-01-20' UNION ALL
    -> SELECT '2015-01-30' UNION ALL
    -> SELECT '2015-02-01' UNION ALL
    -> SELECT '2015-02-02' ;
Query OK, 6 rows affected (0.09 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> DELIMITER $$
mysql> CREATE PROCEDURE MyDelete()
    -> BEGIN
    -> SET @date = '2015-01-10';
    -> WHILE @date < '2015-02-01' DO
    -> DELETE FROM `table` WHERE `date` = @date;
    -> SET @date = @date + INTERVAL 1 DAY;
    -> END WHILE;
    -> END;
    -> $$
Query OK, 0 rows affected (0.10 sec)

mysql> DELIMITER ;
mysql> SELECT * FROM `table`;
+---------------------+
| date                |
+---------------------+
| 2015-01-01 00:00:00 |
| 2015-01-10 00:00:00 |
| 2015-01-20 00:00:00 |
| 2015-01-30 00:00:00 |
| 2015-02-01 00:00:00 |
| 2015-02-02 00:00:00 |
+---------------------+
6 rows in set (0.02 sec)

mysql> CALL MyDelete;
Query OK, 0 rows affected (0.15 sec)

mysql> SELECT * FROM `table`;
+---------------------+
| date                |
+---------------------+
| 2015-01-01 00:00:00 |
| 2015-02-01 00:00:00 |
| 2015-02-02 00:00:00 |
+---------------------+
3 rows in set (0.00 sec)
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902705
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

тоже commit забыл
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902710
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Спасибо большое, я ваш должник!) у меня заработал ваш вариант, когда в строке DELETE FROM `table` WHERE `date` = @date; моя таблица без кавычек и столбец без кавычек, т.е. DELETE FROM records WHERE rec_date = @date;
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902721
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivcommit забылА нафига он тут? у меня и транзакции-то нету, так что результат выполнения каждого DELETE сразу и коммиттится.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902728
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewerмоя таблица без кавычек и столбец без кавычек, т.е. DELETE FROM records WHERE rec_date = @date;
Если кавычки вызывали проблему, и не было лишних или нехватающих, то вывод однозначный - были НЕ ТЕ кавычки, какие надо.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902798
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaMasterZivcommit забылА нафига он тут? у меня и транзакции-то нету, так что результат выполнения каждого DELETE сразу и коммиттится.

Код: sql
1.
2.


я опять все сломал(. Что с комитом, что без перестал работать, вроде пишет affected 0, но строки остаются.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902817
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Да, Вы правы.

Такой код тоже сработал
Код: sql
1.
2.
3.
4.
5.
6.
7.
BEGIN
    SET @date = '2011-01-10';
    WHILE @date < '2012-03-31' DO
    DELETE FROM `records` WHERE `rec_date` = @date;
    SET @date = @date + INTERVAL 1 DAY;
    END WHILE;
    END



Но строки опять не удалил.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902833
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivcommit забылА нафига он тут? у меня и транзакции-то нету, так что результат выполнения каждого DELETE сразу и коммиттится.

Объясни тогда, зачем вообще весь этот гемор с процедурой и циклом, если не для оптимизации транзакций ?
Без оптимизации транзакций можно и одним запросом всё, что надо удалить.
Быстрее будет (правда, возможно не закончится успешно).
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902840
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivAkinaпропущено...
А нафига он тут? у меня и транзакции-то нету, так что результат выполнения каждого DELETE сразу и коммиттится.

Объясни тогда, зачем вообще весь этот гемор с процедурой и циклом, если не для оптимизации транзакций ?
Без оптимизации транзакций можно и одним запросом всё, что надо удалить.
Быстрее будет (правда, возможно не закончится успешно).

А, сори, тут я уже стормозил.
Там же каждый оператор много записей удаляет.
Извините, не догнал, тогда всё ок, commit не нужен (при включённом autocommit).
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902851
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОбъясни тогда, зачем вообще весь этот гемор с процедурой и циклом, если не для оптимизации транзакций ?Это к ТС вопрос. Где он там про транзакции-то говорил? что-то я такого за ним не припоминаю...

MasterZivБез оптимизации транзакций можно и одним запросом всё, что надо удалить.
Ну или отправить сервер в кому. И после восстановления обнаружить малоосмысленные ошмётки базы. А что, вариант, нет данных - нет проблемы.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38902858
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlrewerТакой код тоже сработал
[skipped]
Но строки опять не удалил.
Вы уж не поленитесь ПОЛНОСТЬЮ показать процедуру. Хрен знает, что там выше-ниже.
А ещё лучше прямо процитируйте с консоли подряд выполненные SHOW CREATE PROCEDURE - SELECT COUNT(*) - CALL - SELECT COUNT(*). Ну чтобы видать было, что оно и как. И да - DISPLAY WARNINGS включите, мало ли...
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38903081
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
mysql> show create procedure mydel;
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------+-
---------------------+----------------------+--------------------+
| Procedure | sql_mode                                                       | Create Procedure

                                                                                                  |
character_set_client | collation_connection | Database Collation |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------+-
---------------------+----------------------+--------------------+
| mydel     | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`
@`localhost` PROCEDURE `mydel`()
BEGIN
SET @date = '2012-03-01';
WHILE @date < '2012-03-31' DO
DELETE FROM records WHERE REC_DATE = @date;
SET @date = @date + INTERVAL 1 DAY;
COMMIT;
END WHILE;
END | latin1               | latin1_swedish_ci    | cp1251_general_ci  |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------+-
---------------------+----------------------+--------------------+
1 row in set (0.00 sec)
mysql> show warnings \g
Empty set (0.00 sec)

mysql> show count(*) warnings;
+-------------------------+
| @@session.warning_count |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)

mysql> select count(*) from records where rec_date<'2012-03-31' limit 5;
+----------+
| count(*) |
+----------+
|  3356582 |
+----------+
1 row in set (31.27 sec)

mysql>
mysql> call mydel;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from records where rec_date<'2012-03-31' limit 5;
+----------+
| count(*) |
+----------+
|  3356582 |
+----------+
1 row in set (1.40 sec)
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38903097
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

с правильными ковычками и без commit. разницы нет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
mysql> show create procedure mydel;
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
+----------------------+----------------------+--------------------+
| Procedure | sql_mode                                                       | Create Procedure


| character_set_client | collation_connection | Database Collation |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
+----------------------+----------------------+--------------------+
| mydel     | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`
@`localhost` PROCEDURE `mydel`()
BEGIN
SET @date = '2012-03-01';
WHILE @date < '2012-03-31' DO
DELETE FROM `records` WHERE `REC_DATE` = @date;
SET @date = @date + INTERVAL 1 DAY;
END WHILE;
END | utf8                 | utf8_general_ci      | cp1251_general_ci  |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

mysql> show count(*) warnings;
+-------------------------+
| @@session.warning_count |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)

mysql> select count(*) from records where rec_date<'2012-03-31';
+----------+
| count(*) |
+----------+
|  3356582 |
+----------+
1 row in set (1.46 sec)

mysql> call mydel;
Query OK, 0 rows affected (0.00 sec)

mysql> select count(*) from records where rec_date<'2012-03-31';
+----------+
| count(*) |
+----------+
|  3356582 |
+----------+
1 row in set (1.31 sec)

mysql> show count(*) warnings;
+-------------------------+
| @@session.warning_count |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)

mysql>
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38903192
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что показывает
Код: sql
1.
2.
3.
SELECT COUNT(*)
FROM records 
WHERE rec_date BETWEEN '2012-03-01' AND '2012-03-31' ;


?
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38905519
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, Прошу прощения за долгий ответ, доступа к базе не было.

Код: sql
1.
2.
3.
4.
5.
6.
7.
mysql> select count(*) from records where rec_date between '2012-03-01' and '2012-03-31';
+----------+
| count(*) |
+----------+
|  3356582 |
+----------+
1 row in set (30.37 sec)
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38906627
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

И еще заметил такую странность, если создать новую процедуру с другими датами, которые не старше этих, запрос на удаление якобы выполняется, пишет время выполнения 40 сек, но при проверки все остаться на месте. А если еще раз вызвать процедуру, то уже время выполнения 0 сек.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38906670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите за дурацкий вопрос... а у Вас поле REC_DATE какой имеет тип? небось с секундочками... а Вы его сравниваете с датой без секунд...

А что второй раз быстрее - так это понятно, кэш работает.
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38906674
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что в процедуре просто замените запрос на удаление на
Код: sql
1.
DELETE FROM `records` WHERE `REC_DATE` < @date;
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38906693
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Уже и с секундами сравнил, то же самое. Вот результат:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
mysql> show create procedure MyDel;
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------+----------------------+----------------------+--------------------+
| Procedure | sql_mode                                                       | Create Procedure


                | character_set_client | collation_connection | Database Collation |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------+----------------------+----------------------+--------------------+
| MyDel     | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` PROCEDURE `MyDel`()
BEGIN
SET @date = '2012-03-01 00:00:00';
WHILE @date < '2012-03-31 23:59:59' DO
DELETE FROM `records` WHERE `REC_DATE`=@date;
SET @date = @date + INTERVAL 1 DAY;
END WHILE;
END | utf8                 | utf8_general_ci      | cp1251_general_ci  |
+-----------+----------------------------------------------------------------+----------------------
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
----------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM records WHERE REC_DATE BETWEEN '2012-03-01 00:00:00' and '2012-03-31 23:59:59';
+----------+
| COUNT(*) |
+----------+
|  4021273 |
+----------+
1 row in set (1 min 8.74 sec)

mysql> call MyDel();
Query OK, 0 rows affected (0.09 sec)

mysql> SELECT COUNT(*) FROM records WHERE REC_DATE BETWEEN '2012-03-01 00:00:00' and '2012-03-31 23:59:59';
+----------+
| COUNT(*) |
+----------+
|  4021273 |
+----------+
1 row in set (2.44 sec)
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38906705
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Ура!
Код: sql
1.
DELETE FROM `records` WHERE `REC_DATE` < @date;

сработал! Удаляет, отпишусь по окончании) Спасибо!
...
Рейтинг: 0 / 0
Удаление из большой базы
    #38907294
vlrewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Удаление успешно, еще раз спасибо!
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление из большой базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]