|
Быстро удалить выборочные записи из базы 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 по этому полю
|
|