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

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

Delete + Update


Nick87 ©   (2008-09-25 12:22:00) 

Поделитесь советами. Имеется таблица содержащая порядка 10 000 записей. необходимо последовательно выполнить 2 запроса (Delete и Update). Таки образом под условия запросов подпадает порядка 8000 записей. Нормальным ли является общее время выполнения этих запросов около 2 минут.

Вот вообщемто сам код. (СУБД FIB)


Result := -1;
 if ConnectionStatus = csConnected then
   with cmp_Query_, cmp_DataBase do begin
     try
       StartTransaction;
       try
         SQL.Text := Format('DELETE FROM Types WHERE (%s = %s) AND (types_code = -1);UPDATE Types SET flags = 1 WHERE (%s = %s) AND (flags NOT IN (1, -1))', [FSelFieldName, Val, FselFieldName, Val];
         ExecSQL;
         Commit;
         Result := RowsAffected;
         except
           Rollback;
           raise;
         end;
     except
       on E: Exception do
         LogError(E.Message);
     end;
   end
 else
   LogError(const_msg_ErrorConnection);


ЮЮ   (2008-09-26 02:55:00) [1]

А как быстро рвботвют ъти же запросы, если поставить SELECT вместо DELETE и UPDATE.

DELETE тормозит, нсли на эту таблицу есть CONSTRAINT FOREIGN KEY из другой таблицы, а индекса по тому полю нет. Тогда FULL SCAN второй таблицы перед удалением каждой записи обеспечен.


Правильный$Вася   (2008-09-25 13:28:00) [2]


> Попробуй flags NOT IN (1, -1) заменить на flags<>1 and flags<>-1.

FB умеет скобки раскрывать
а про план я давно сказал


Sergey13   (2008-09-25 13:27:00) [3]

> [4] Nick87   (25.09.08 13:12)

А вообще недурно бы структуру таблицы с индексами опубликовать. И план посмотреть.


Правильный$Вася   (2008-09-25 13:27:00) [4]


> под условия запросов подпадает порядка 8000 записей

так под удаление или под изменение?
или в сумме? - тогда каждый вотдельности охарактеризуй
и план смотри, может, где-то индексировать надо


Sergey13   (2008-09-25 13:26:00) [5]

> [4] Nick87   (25.09.08 13:12)

Попробуй flags NOT IN (1, -1) заменить на flags<>1 and flags<>-1.


Nick87   (2008-09-25 13:22:00) [6]

FireBird 2.0


Ega23   (2008-09-25 13:17:00) [7]


>
> > СУБД FIB
>
> что это?


Фускин InterBase ?


Правильный$Вася   (2008-09-25 13:13:00) [8]


> СУБД FIB

что это?


Nick87   (2008-09-25 13:12:00) [9]


> > [0] Nick87   (25.09.08 12:22)> Нормальным ли является
> общее время выполнения этих запросов около 2 минут.Многовато
> что-то, ИМХО. А какой из двух тормозит больше?

2 (Update)


Sergey13   (2008-09-25 13:06:00) [10]

> [0] Nick87   (25.09.08 12:22)
> Нормальным ли является общее время выполнения этих запросов около 2 минут.

Многовато что-то, ИМХО. А какой из двух тормозит больше?


Правильный$Вася   (2008-09-25 12:41:00) [11]


> Поросенок Винни-Пух ©   (25.09.08 12:28) [1]

только в случае разовой операции удаления
в программе же не стоит этого делать

лучше обратить внимание на план выполнения каждого запроса и улучшить его, если есть возможность


Поросенок Винни-Пух   (2008-09-25 12:28:00) [12]

после массового делита полезно сделать уборку мусора (версий строк)


Наверх

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