powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление из большой базы
17 сообщений из 42, страница 2 из 2
Удаление из большой базы
    #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
17 сообщений из 42, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Удаление из большой базы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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