Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 20:18   #1
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию Update Firebird

Здраствуйте форумчане! Есть вопросы по Firebird! Есть хранимая процедура которая бежит по таблице и делает update table1 set kolvo=100 where id=i
(i увеличивается в цикле) и все! Так вот цикл на 10000 записей выполняется 26 сек! какие есть есть мнения?
RuVarez вне форума Ответить с цитированием
Старый 24.02.2012, 20:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А условие нормальное во WHERE сделать для исключения цикла не судьба?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 20:24   #3
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Код:
begin
  some_var=0;
  while (some_var < 10000) do
  begin
    some_var = some_var + 1;
   /* insert into table1 values(:some_var,'test fuck');    */
   update table1 set kolvo=100 where id=:some_var;
  end
end
RuVarez вне форума Ответить с цитированием
Старый 24.02.2012, 20:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну а просто
Код:
update table1 set kolvo=100 where id BETWEEN 1 AND 10000
а еще проще (если id>0)
Код:
update table1 set kolvo=100 where id<=10000
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 20:33   #5
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Нет я понимаю! но это тестовая база! У мня есть база с такой процедурой
Код:
begin
  for select name from poisk into :v_name do
  begin
    select count(*) from news where (news_date>=:filter_date) and (news_time>=
      case when news_date=:filter_date then :filter_time else '' end)
      and (news_attacker=:v_name) into :v_att_count;
    select count(*) from news where (news_date>=:filter_date) and (news_time>=
      case when news_date=:filter_date then :filter_time else '' end)
      and news_defender=:v_name into :v_def_count;

    if ( (v_def_count>5) and (v_att_count<1)) then
    begin
      v_result = 'Ждать 24 часа';
    end
    else
    begin
      if ( (v_def_count-v_att_count)>0 ) then
      begin
        v_help = (v_def_count-v_att_count)*4;
        v_result = 'Ждать ' || v_help || ' часа';
      end
      else
        v_result = 'Грабь быстрее';
    end
    v_result = 'test';
    update poisk set grab_result=:v_result where name=:v_name;
  end
end
и вот при 7000 записей в таблицах poisk и news процедура
выполняется около 3 мин
RuVarez вне форума Ответить с цитированием
Старый 24.02.2012, 20:40   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Все подобные фишки с циклами естественно замедляют работу SQL сервера. А если еще по индексам таблицы не оптимизированы, то вдвойне. Максимально избавляйтесь от подобных вещей и не будет монстров выполняющихся 3 минуты
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 20:42   #7
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Втом то и дело что заменить никак не могу( Ладно мпасибо и за это!
RuVarez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
update notification DemoNNable Microsoft Office Excel 3 30.05.2011 18:55
update Margana PHP 1 01.05.2011 19:55
Update usmesn PHP 3 02.06.2010 17:23
update shad0w SQL, базы данных 3 27.10.2009 11:44
insert и update Tanusha SQL, базы данных 4 13.03.2009 14:47