Имя: Пароль:
IT
 
Быстро удалить выборочные записи из базы ms sql
0 anders297
 
16.10.23
09:08
Существует ли что-то типа bulk insert, для операции DELETE? или как ускорить задачу:

Есть внешняя база в ms sql, мне по условию, на четыре колонки нужно удалять большое количество записей, в среднем 50 тыс.
Сейчас генерирую запрос порциями типа delete from my_table where ((f1='f1') and (f2='f2') and (f1='f1') and (f1='f1')) OR ((f1='f5') and (f2='f6') and (f1='f7') and (f1='f8')) OR...
Скорость не удовлетворяет.
1 Волшебник
 
16.10.23
09:10
Уберите OR
Делайте несколько запросов DELETE
2 anders297
 
16.10.23
09:32
(1) прервал процесс, не дождавшись. Будет на порядки медленнее.
Пример запроса:
DELETE FROM calc_indicators WHERE (good_code='00000014811') AND (storage_code='000000001') AND (base_code='Pr0000003') AND (indicator_code='Pr0000002')
3 Волшебник
 
16.10.23
09:34
(2) теперь посмотрите план запроса SELECT * FROM calc_indicators WHERE ...
и проверьте, какие можно добавить индексы
4 lodger
 
16.10.23
09:36
(2) и все эти поля в индексе?
5 ptiz
 
16.10.23
10:18
(0) А может перепроектировать базу: сделать поле типа "пометка удаления", и вместо delete делать апдейт этого поля.  Критичные запросы переписать с учетом этого поля. А delete выполнять позже, в фоне.
6 kortun
 
16.10.23
10:56
(5) а с чего update будет быстрее delete?
7 Волшебник
 
16.10.23
10:57
(6) Вполне может быть быстрее. Update сохраняет объём в таблице. Если Update числового/булевого поля, то не нужно освобождать место.
8 kortun
 
16.10.23
11:02
(7) так ему все равно удалять надо. Если перепроектировать, то придется добавить поле, индекс по нему, учитывать это поле в запросах, потом удалять и контролировать удаление. Тут ускорение даже в теории не видно.
9 ptiz
 
16.10.23
11:09
(8) Смысл удаления в данном случае - чтобы записи не светились в запросах. "Не светить" их можно просто наложив условие. А скорость последующего физического удаления не критична. Опять же - надо знать полностью задачу, права ТС на базу и др.
10 Garykom
 
гуру
16.10.23
11:58
(0) добавить булеов поле аля пометка удаления, затем update и затем delete по этому полю
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn