![]() |
|
Быстро удалить выборочные записи из базы 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 по этому полю
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |