![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как увеличить скорость удаления записей [D7, MSSQL]
redlord © (2005-08-18 21:07:00)всем привет
народ подскажите можно ли увеличить скорость удаления записей из таблицы
а то у меня удаление 10000 записей занимает порядка 30 секунд
я использую sql запрос типа : delete from ... where ... для удаления всех не нужных записей одним запросом.
P.S. mssql сервер и моя прога запущены на одном компе
Anatoly Podgoretsky (2005-08-19 19:08:00) [21]redlord (19.08.05 17:10) [7]
1 в таблице нет индексов все поля не индексированы
И ты еще жжешь скорости?
MOA (2005-08-19 17:44:00) [22]>все поля не индексированы
Вот поэтому и
>удаление грузит машину на 100 процентов
и
>удаление 10000 записей занимает порядка 30 секунд
Дело в том, что сервер при отсутствии индекса просматривает всю таблицу - каждую запись, от первой до последней. Если таблица большая - всю её в кэш сервер считать не сможет - и своп тормозит машины ещё быстрее (поэтому 100% загрузки - страницми VM шелестик аж караул ;)).
Сделайте индекс по ip - скорость значительно возрастёт.
Удачи!
redlord (2005-08-19 17:10:00) [23]to анатолий
по прозьбе МОА снимаю гриф совершенно секретно
1 в таблице нет индексов все поля не индексированы
2 процедура удаления выполняется примерно раз в час но етот комп
является игровым сервером локальной сети а удаление грузит машину на 100 процентов
3 строку delete from ... where ... читать как
delete from mytbl where ip= 192.168.75.6
Anatoly Podgoretsky (2005-08-19 10:03:00) [24]MOA © (19.08.05 10:01) [5]
Нельзя - это самая секретная часть вопроса, не считая триггеров.
MOA (2005-08-19 10:01:00) [25]А может просто - либо нет индексов по полям в WHERE - либо, наоборот, излишне много индексов?
Вариант - оператор не в процедуре/функции? Не динамический?
Если условие в WHERE не черезчур громоздко - возможно, будет полезно на него взглянуть.
Удачи!
Ega23 (2005-08-19 09:54:00) [26]если в where стоит какой-нибудь вложенный Select, то ситуация вполне может быть.
Рекомендую взглянуть в сторону "ночного аудита системы". Т.е. если это очистка мусора, то проводить её, допустим в 3 часа ночи, когда система наиболее разгружена.
Anatoly Podgoretsky (2005-08-19 09:36:00) [27]Кроме триггеров важна часть WHERE и наличие ресурсов у компьютера.
Sergey13 (2005-08-19 09:20:00) [28]Я бы в таком вопросе был поосторожнее с тригерами и индексами. Если они есть, то наверное неспроста.
Можно попробовать удалять пачками (например по 1000 штук).
Если это разовое удаление - 30 секунд фигня. Если это требуется часто, то это повод задуматься о проектировании. ИМХО.
Джо (2005-08-19 06:08:00) [29]Дропни тригеры перед удалением, затем включи. Отключи индексы.