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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 16.10.2011, 14:39   #1
chui
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 48
По умолчанию Увеличение быстродействия

Здраствуйте. Нужна помощь.
Код:
IBQuery18.Close;
IBQuery18.SQL.Clear;
IBQuery18.SQL.Add('SELECT Field1 from Table1 left join Table2 on (Field3 = Field4) where (Field5 = '''+X1+''')  and (Field6 = '''+X2+''');');
IBQuery18.Open;
Y:= StrToFloat(IBQuery18.Fields[0].Value);
Данный запрос используется в цикле и таких запросов несколько. Это очень сильно тормозит выполнение необходимой задачи. Что можно сделать для увеличения быстродействия? Спасибо!

Читаем правила раздела.
Там вполне доступно описано, как следует оформлять код, чтобы не навлечь на себя гнев администрации

Последний раз редактировалось mihali4; 17.10.2011 в 00:15.
chui вне форума
Старый 16.10.2011, 17:00   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

почитайте про параметеризированные запросы и будет вам счастье.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума
Старый 16.10.2011, 23:13   #3
chui
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 48
По умолчанию

Цитата:
Сообщение от BARNEY Посмотреть сообщение
почитайте про параметеризированные запросы и будет вам счастье.
Думал об этом. Хотя с параметрезированными запросами почти не знаком. Когда-то в запросе использовал параметры, но там это были не изменяемые значения, а в моем примере Х1 и Х2 изменяются с каждой итерацией цикла. Это мне не поешает?

Читаем правила раздела.
Там вполне доступно описано, что следует цитировать и что бывает за оверквотинг...

Последний раз редактировалось mihali4; 17.10.2011 в 00:16.
chui вне форума
Старый 17.10.2011, 10:44   #4
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Цитата:
Сообщение от chui Посмотреть сообщение
Думал об этом. Хотя с параметрезированными запросами почти не знаком. ... а в моем примере Х1 и Х2 изменяются с каждой итерацией цикла. Это мне не поешает?
Нет, параметры для этого используются чтобы не изменять текст запроса каждый раз.
В тексте запроса, в разделе условий (where) объявляется ИМЯ_ПОЛЯ УСЛОВИЕ ИМЯ_ПАРАМЕТРА, причем имя параметра начинается с двоеточия.
Кроме того советую указвать имя поля в виде ИМЯ_ТАБЛИЦЫ.ИМЯ_ПОЛЯ.
Код:
SELECT Table1.Field1 
from Table1 left join Table2 on (Table1.Field3 = Table2.Field4) 
where (Table1.Field5 =:PARAMFLD5)  and (Table1.Field6 =:PRMFLD6 )
Да и еще запросы выполняемые в цикле могут сильно, очень сильно ускорится благодаря созданию составных индексов для полей по которым используются параметры.

Мое замечание насчет оверквотинга к вам тоже относится.
И, поскольку вы уже не новичок, получите заслуженный штраф за флуд.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем

Последний раз редактировалось mihali4; 17.10.2011 в 11:43. Причина: Я тут подумал...
Surgeon вне форума
Старый 17.10.2011, 14:33   #5
chui
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 48
По умолчанию

Видимо в моем случае запрос с параметрами не поможет.

Код HTML:
for i:= 1 to max do begin
       cdtmp.First;
       for j:=0 to cdtmp.RecordCount-1 do  begin
         MATCOUNT:= trim(cdtmp.FieldByName('TCOUNT').AsString);
         GTDRAZR:= trim(cdtmp.FieldByName('GTDRAZR').AsString);
         GTDRAZROSN:= trim(cdtmp.FieldByName('GTDRAZROSN').AsString);
         IMPGTDNO:= trim(cdtmp.FieldByName('IMPGTDNO').AsString);
         IMPGTDNOOSN:= trim(cdtmp.FieldByName('IMPGTDNOOSN').AsString);
          if StrToInt(IMPGTDNO) = i then
            begin
              IMPGTDNO2:= IMPGTDNO;
              GTDRAZR2:= GTDRAZR;
               with IBQuery18 do begin
                Close;
                Params[0].AsString:=IMPGTDNOOSN;
                Params[1].AsString:=GTDRAZROSN;
                Open;
                FetchAll;
               end;
              mat_costone:= ((StrToFloat(IBQuery18.Fields[1].Value))/(StrToFloat(IBQuery18.Fields[0].Value)))*StrToFloat(MATCOUNT);
              matprod:= matprod + mat_costone;
            end;
         cdtmp.Next;
       end;
В этом случае запрос остается в цикле всеравно и быстродействие не меняется. При попытке вынести за пределы цикла возвращает неверные значения. Я так понимаю, что это происходит из-за того, что я вначале присваиваю значения. Но мне нужно это делать в любом случае.
Что еще можно сделать?
chui вне форума
Старый 17.10.2011, 15:48   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Тему закрыл, т.к. топикстартер вызывающе не желает соблюдать наши правила.
Если повторится, ТС (несмотря на гордое звание "новичок") получит положенный штраф.
А там, при желании, и до бана сам догребет...
mihali4 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySQL - увеличение быстродействия Linel SQL, базы данных 8 17.01.2011 13:39
Сравнение быстродействия ChaosDev Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 22.11.2010 03:32
Вопрос быстродействия _Денис C++ Builder 1 14.11.2009 17:00
Сравнение быстродействия алгоритмов Pti44ka Помощь студентам 9 13.11.2009 13:41
Падение быстродействия в макросе skif93 Microsoft Office Excel 8 12.04.2009 14:49