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

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

Так чтобы побыстрей работало ... [D5, MSSQL]


Страницы:   1 2

Vikuksa ©   (2002-07-08 11:44:00) 

Please, help!!! Есть парочка вложенных запросов, пока выполняются можно помереть со скуки. Как сделать чтобы побыстрее работало?


Johnmen   (2002-07-08 14:17:00) [21]

Отвечу за Anatoly Podgoretsky © :
Каждой записи из Q1 ты сопоставляешь все записи из Q2.

А Q2 в данном случае должен быть совсем другим, ведь тебе надо фактически лишь знать, есть ли хоть одна запись в Q2. (см. COUNT(*))


Vikuksa   (2002-07-08 14:02:00) [22]

Anatoly, извини! Объясни дурехе где ты нашел произведение!


Vikuksa   (2002-07-08 13:51:00) [23]

Anatoly, Ты с какого дуба рухнул?
КАКОЕ ЕЩЕ ПРОИЗВЕДЕНИЕ?


Vikuksa   (2002-07-08 13:49:00) [24]

А ПО-НОРМАЛЬНОМУ ЕТО КАК?


Anatoly Podgoretsky   (2002-07-08 13:49:00) [25]

О да у тебя декартово произведение q1*q2


jonik pegas   (2002-07-08 13:35:00) [26]

Надо развлекать пользователя чтобы не скучал
(Например ProgressBar-ом или сообщениями "Идет выполнение запроса
осталось 10% или 1 Мин" с перекидывающей папки Avi-шкой):-)
Второй запрос сделать параметрическим


Telly_F   (2002-07-08 13:34:00) [27]

В добавление к Samalex1:
Еще глянь, а индексы по полям из where есть? Если есть - то какие? Попробуй с ними поработать...


samalex1   (2002-07-08 13:27:00) [28]

Я что-то не понимаю, зачем функция CONVERT, может ее убрать?
Действительно, не стоит добавлять отдельно по-строчкам, можно все целиком. Или !!! используй параметрические запросы (:par заместо "+txt1+"), очень удобно, поверь, или хранимые процедуры в SQL, еще удобнее.


TSV   (2002-07-08 12:52:00) [29]

> Vikuksa (08.07.02 12:43)
Ты по-нормальному запрос написать можешь?


Vikuksa   (2002-07-08 12:43:00) [30]

ADOQuery1.Active := false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT T_Emitent.sng FROM T_Emitent left JOIN T_Emission ON ");
ADOQuery1.SQL.Add("T_Emitent.SN = T_Emission.SNE RIGHT OUTER JOIN T_SRVEmitent ON T_Emitent.SN = T_SRVEmitent.SNE ");
ADOQuery1.SQL.Add("WHERE (T_SRVEmitent.F1 = 1) AND (T_SRVEmitent.F9 = 1) GROUP BY T_Emitent.sng ");
ADOQuery1.SQL.Add("HAVING (MAX(T_Emission.DataReg) <= CONVERT(DATETIME,""1997 - 01 - 08 00 : 00 : 00 "", 102)) ");
ADOQuery1.Active := true;
while not ADOQuery1.Eof do
begin
txt1 := ADOQuery1.fieldbyname("sng").AsString;
ADOQuery2.Active := false;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add("SELECT T_Emitent.sng FROM T_Emitent RIGHT JOIN T_DocFace ON T_Emitent.SN = T_DocFace.SNE ");
ADOQuery2.SQL.Add("WHERE (T_Emitent.sng = "+txt1+")");
ADOQuery2.SQL.Add("GROUP BY T_Emitent.sng, T_DocFace.F1, T_DocFace.F2, ");
ADOQuery2.SQL.Add("T_DocFace.F3 HAVING (T_DocFace.F1 = 1) AND (T_DocFace.F3 = 4)AND(T_DocFace.F2 = "+IntToStr(pp)+")");
ADOQuery2.Active := true;
if not ADOQuery2.Eof then inc(ii);
ADOQuery1.Next;
end;

ВОТ ПРИМЕРЧИК! И ЧТО????????


Леша   (2002-07-08 12:14:00) [31]

Можно проидексировать таблицы.


-=Sergeante=-   (2002-07-08 12:12:00) [32]

> Vikuksa
Надо оптимизировать запрос :)


Val   (2002-07-08 12:10:00) [33]

>Vikuksa
наверное, пока выполняются, зашел сюда? :)


Johnmen   (2002-07-08 11:54:00) [34]

А где же сами запросы ???


Страницы:   1 2

Наверх

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