Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как увеличить скорость удаления записей [D7, MSSQL]


Страницы:   1 2

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]

Дропни тригеры перед удалением, затем включи. Отключи индексы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо