|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть программа стороннего разработчика под FireBird 1.5. В одной таблице накопилось большое количество записей. Но в программе не предусмотрено групповое удаление записей. Подключил ее в IBExpert. Думаю, что можно удалить все записи за определенный период при помощи запроса. О БД имею теоретические знания. Но предполагаю, что запрос должен начинаться как-то так: DELETE FROM TABLE_NAME WHERE ... дальше не знаю что писать. По-русски он звучит так: УДАЛИТЬ В ТАБЛИЦЕ ЗАПИСИ ОТ 01.01.2005 ДО 01.01.2015 Понимаю всю наглость своей просьбы, но так как задача одноразовая... Может кто-то напишет мне шаблон запроса? Как для блондинки. Или в IBExpert есть такая штатная функция? К пинкам, плевкам и анальному выпилу из реальности готов. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 15:42 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg, DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 15:58 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgесть такая штатная функция? Нет. Если нет специального поля типа "ДатаСозданияЗаписи" - то нельзя никак. Да и если есть - откуда ты знаешь, важна ли эта запись. Нужно искать этого стороннего разработчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 15:59 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
KreatorXXI, спасибо, добрый человек! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 16:04 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg, И не забыть подтвердить транзакцию (кнопка с зелёной галкой). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 16:08 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg, и до кучи KreatorXXI в базе не всегда можно что-то удалить, казалось-бы "лишнее". Например, в бухгалтерской БД нельзя просто удалить что-то за прошлый год. Должна быть специальная процедура "свёртки". Кроме того, определенные данные невозможно удалить из-за связей с другими данными. Допустим, в 1С можно удалить адресный классификатор. Но в результате потом нельзя по конторам напечатать конверты, приходится опять грузить часть классификатора по индексу. И так далее. Так что см. ответ YuRock. А потом - "большое количество записей" - это какое? Программа тормозит, или что? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 16:12 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgЗдравствуйте. Есть программа стороннего разработчика под FireBird 1.5. В одной таблице накопилось большое количество записей. Но в программе не предусмотрено групповое удаление записей. Подключил ее в IBExpert. Думаю, что можно удалить все записи за определенный период при помощи запроса. О БД имею теоретические знания. Но предполагаю, что запрос должен начинаться как-то так: DELETE FROM TABLE_NAME WHERE ... дальше не знаю что писать. По-русски он звучит так: УДАЛИТЬ В ТАБЛИЦЕ ЗАПИСИ ОТ 01.01.2005 ДО 01.01.2015 Понимаю всю наглость своей просьбы, но так как задача одноразовая... Может кто-то напишет мне шаблон запроса? Как для блондинки. Или в IBExpert есть такая штатная функция? К пинкам, плевкам и анальному выпилу из реальности готов. будь готов что пользователи тебе что-нибудь оторвут после удалений таких... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 16:15 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgК пинкам, плевкам и анальному выпилу из реальности готов. 1. Тихой темной ночью добавь поле "признак архива" и сделай вьюху, которая берет только не архивные записи. Переделай все селекты на вьюху. 2. Опять же темной и тихой ночью создай таблицу-двойника, перенеси в нее архивные данные и сделай вьюху, которая объединяет эти таблицы. Я-бы так сделал, если архитектура кривая и иного не предусматривает. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2018, 16:21 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
YuRockЕсли нет специального поля типа "ДатаСозданияЗаписи" - то нельзя никак. Да и если есть - откуда ты знаешь, важна ли эта запись. Нужно искать этого стороннего разработчика. Поле есть. Разраб говорит: давай базу - посмотрим. А начальство не разрешает. kdvКроме того, определенные данные невозможно удалить из-за связей с другими данными. А потом - "большое количество записей" - это какое? Программа тормозит, или что? От таблицы зависят только триггеры (хз, что за зверь). Удаление записей может повлиять на них? Подсчет записей в программе вызывает ее зависание, а как сделать это в IBExpert я не нашел. Большое, короче, количество. И да, программа тормозит, жутко, до полного зависания. Именно, когда некоторые пользователи переходят в программе на эту таблицу. Я не совсем понял: KreatorXXIkarpov-ukg, DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'. это тру запрос? А то в высказываниях некоторых участников мне послышался сарказм в его адрес. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 08:43 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgЯ не совсем понял: KreatorXXIkarpov-ukg, DELETE FROM TABLE_NAME WHERE date between '2005-01-01' and '2014-12-31'. это тру запрос? А то в высказываниях некоторых участников мне послышался сарказм в его адрес. Теоретически запрос верен. Если в базе всего одна таблица и в ней есть поле date по которому ставится условие удаления. Но в реальной жизни как правило все совсем не так. На реальной базе он в лучшем случае не сработает из-за отсутствия поля date в этой таблице, а в худшем - повредит данные так что в одной таблице перестанет соответстсвовать в другой. Или, к примеру, пересчитает какие-то суммы в других таблицах, непредственно сейчас или когда-то в будущем, когда программа натолкнется на несовпадение. Еще один страшный сценарий - удаление записей повлечет за собой каскадное удаление записей в других таблицах, чего ты не планировал. После гигантских delete останется куча мусора который нужно будет собрать. Хотя бы перебэкапом. Зависание при обращении к таблице может быть вызвано не только большим количеством записей, но и к примеру поломкой нужного для этого запроса индекса. Или другой случай - при разработке запроса план запроса был один. Увеличилось количество записей - и план запроса поменялся, и может так случиться что не в лучшую сторону. Тут без разработчика не обойтись. И ему нужна база с реальным количеством данных, о чем он и просит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 09:16 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg, Запрос-то тру. А Вы рассказали бы - что за таблица, есть ли связи. Действительно, может толку от запроса никакого, стоит, например, защита по форейн-ключу. Может лучше посмотреть какие индексы сделать. Нужен сам запрос, который тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 09:43 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgПодсчет записей в программе вызывает ее зависание, а как сделать это в IBExpert я не нашел. Большое, короче, количество. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 09:48 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgРазраб говорит: давай базу - посмотрим. А начальство не разрешает. Если разработчик, прежде чем дать инструкции по удалению, просит посмотреть базу, значит лучше ему ее дать. А если начальство не разрешает, значит ничего удалять не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 10:12 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
KreatorXXIkarpov-ukg, Запрос-то тру. А Вы рассказали бы - что за таблица, есть ли связи. Действительно, может толку от запроса никакого, стоит, например, защита по форейн-ключу. Может лучше посмотреть какие индексы сделать. Нужен сам запрос, который тормозит. Для начала можно DDL искомой таблицы привести (в Эксперте закладка "Скрипт" или "DDL"). А подсчёт количества записей во всей таблице, как правило, не имеет смысла, таблица может быть огромной. Смысл имеет подсчёт количества записей по какому-нибудь критерию (например, за период времени), а здесь нужно смотреть наличие индексов. Если их нет, или нужных нет, то перебирается вся таблица, что не есть хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 10:13 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
KreatorXXI, да он не понимает в БД. Какой смысл такие советы давать. Этот топик из разряда "дайте я сам починю ядерный реактор". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 11:13 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
310354 KreatorXXIДля начала можно DDL искомой таблицы привести (в Эксперте закладка "Скрипт" или "DDL"). Вкладки DDL не нашел, скопировал из вкладки скрипт /******************************************************************************/ /*** Generated by IBExpert 17.05.2018 11:09:07 ***/ /******************************************************************************/ /******************************************************************************/ /*** Following SET SQL DIALECT is just for the Database Comparer ***/ /******************************************************************************/ /******************************************************************************/ /*** Tables ***/ /******************************************************************************/ CREATE TABLE HISTORY ( IDHIST INTEGER NOT NULL, IDCUST INTEGER NOT NULL, IDUSER INTEGER, DATECR DATE, HISTORY CHAR(1) COLLATE PXW_CYRL, NOTE VAR4096 COLLATE PXW_CYRL /* VAR4096 = VARCHAR(4096) */, ACCESS CHAR(1), PRIOR CHAR(1) default "-" COLLATE PXW_CYRL, BUDIL CHAR(1) default "-" COLLATE PXW_CYRL, IDHISTTYPE INTEGER NOT NULL, IDCONTACTS ID_NULL /* ID_NULL = INTEGER */, FILEPATH VAR255 COLLATE PXW_CYRL /* VAR255 = VARCHAR(255) */, IDCREATOR INTEGER ); /******************************************************************************/ /*** Primary keys ***/ /******************************************************************************/ ALTER TABLE HISTORY ADD PRIMARY KEY (IDHIST); /******************************************************************************/ /*** Foreign keys ***/ /******************************************************************************/ ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_CONTACTS FOREIGN KEY (IDCONTACTS) REFERENCES CONTACTS (IDCONTACTS) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_CUSTOMER FOREIGN KEY (IDCUST) REFERENCES CUSTOMER (IDCUST) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_HISTTYPE FOREIGN KEY (IDHISTTYPE) REFERENCES HISTTYPE (IDHISTTYPE) ON UPDATE CASCADE; ALTER TABLE HISTORY ADD CONSTRAINT FK_HISTORY_TO_USERS FOREIGN KEY (IDUSER) REFERENCES USERS (IDUSER) ON UPDATE CASCADE; /******************************************************************************/ /*** Indices ***/ /******************************************************************************/ CREATE DESCENDING INDEX HISTORY_DATECR ON HISTORY (DATECR); /******************************************************************************/ /*** Privileges ***/ /******************************************************************************/ Скрин полей Скрин индексов Экспорт метаданных - и это наверно будет самая полная информация. Чего бы еще вам показать... Говорю ж, в БД я - бландынка. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 11:51 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
kdvKreatorXXI, да он не понимает в БД. Какой смысл такие советы давать. Этот топик из разряда "дайте я сам починю ядерный реактор". Нереально? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 11:53 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg... UPDATE CASCADE ужас ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 11:54 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgDATECR DATE, Дата создания есть... Но все равно, отстрелит себе обе ноги, одну руку и хорошо, если голову не заденет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 12:05 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgНереально? ну вот я не чиню трактора, потому что не умею. И не испытываю по этому поводу никаких сожалений. Вам руководство на каком основании дало задание "уменьшить базу данных"? Вы админ? Или сами проявляете инициативу (которая обычно наказуема)? Ваша задача была найти автора программы. Нашли. Руководство "давать" базу данных не хочет. А удаленный доступ даст? К другому компу с копией этой базы? Нет? Ну тогда сообщите руководству, что иначе удалить записи нельзя. Или пусть оно само (руководство) удалит эти записи. Или пусть покупает ssd для хранения базы, тогда всё будет работать гораздо быстрее. Впрочем, про размер базы мы так ничего и не услышали. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 12:21 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
kdv> Впрочем, про размер базы мы так ничего и не услышали. Стопицот! Какая разница? Важно не сколько там гиг, а как написана - если размер небольшой, но написана пер-анус - всё равно тормозить будет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 12:23 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukg, нормальная таблица. И индекс по дате есть. А чего тормозит? Какую инфу пытаетесь вытащить из таблицы? В принципе считаю, можно записи грохнуть по дате создания записи (DATECR). Некая история, никому уже не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 12:34 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
KreatorXXIВ принципе считаю, можно записи грохнуть по дате создания записи (DATECR) Можно сразу так: Код: sql 1.
Навсякий: karpov-ukg , это шутка, не делай такого. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 12:50 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
Я понял, что с этим не так все просто, как на самом деле. Благодарю всех откликнувшихся, извиняюсь за потраченное время. Добра. И ПыСы YuRock Догадался. По конечной дате. И ПыСы2 А народ в этой ветке поотзывчевей, чем на иных форумах. Где меня постов 20 бы обливали дерьмом, прежде чем написать по делу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2018, 16:28 |
|
Удаление записей за период времени
|
|||
---|---|---|---|
#18+
karpov-ukgИ ПыСы YuRock Догадался. По конечной дате. У меня такое ощущение что догадался, но неправильно :) Код: plsql 1. 2.
CURRENT_TIMESTAMP - это текущее дата-время. Т.е. если эту команду выполнить в период с 2001 года по 2101 год - то она просто удаляет ВСЕ ЗАПИСИ из таблицы :) А если каким-то образом текущая дата не поопадает в вилку годов - то просто ничего не делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2018, 04:26 |
|
|
start [/forum/topic.php?fid=40&msg=39645910&tid=1561102]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 254ms |
0 / 0 |