Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.13;
Скачать: CL | DM;

Вниз

Выборка из нескольких таблиц.   Найти похожие ветки 

 
Becket ©   (2003-02-20 22:42) [0]

Наверняка вопрос очень простой, но для меня актуальный.
Есть несколько таблиц (5), выбираю из низ необходимые данные, из каждой. Затем нужно свести их в один отчет, по совпадающим ключевым полям.
Не могу догнать, как оптимизировать этот процесс.
У меня получается очень долго.
Какой алгоритм посоветуете?


 
KIR ©   (2003-02-20 22:56) [1]

Какой СУБД пользуешься?
Долого, это сколько?


 
Becket ©   (2003-02-20 23:42) [2]

MySQL
Минут 5-7.


 
Johnmen ©   (2003-02-20 23:48) [3]

А как выглядит сам процесс ? :)


 
Becket ©   (2003-02-20 23:59) [4]

Ну примерно вот так :)

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl1 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f1.Value:=Query1sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl2 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f2.Value:=Query3sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl3 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f3.Value:=Query2sumquant.AsInteger;
Table1f4.Value:=Table1f1.Value-Table1f2.Value+Table1f3.Value;
end;



 
AM   (2003-02-20 23:59) [5]

Если это запрос типа "SELECT ..."
Таблиц не более 5-ти.
Из твоих слов понятно, что вложенность запросов не совсем большая...
5-7 минут - это очень много, если конечно у тебя количество строк в таблицах не по несколько сотен тысяч, количество столбцов несколько сотен и процессор какой-нибудь Pentium-166.

Попробуй перезагрузи компьютер и/или сервер...


 
AM   (2003-02-21 00:07) [6]

А я думал у тебя идет один запрос...

Я не знаю MySQL, но если он поддерживает вложенные запросы и
" UNION ALL " то все что ты делаешь можно сделать с помощью одного запроса...


 
Johnmen ©   (2003-02-21 00:07) [7]

1. distinct здесь неуместен
2.
select
code,
sum(tbl1.quant),
sum(tbl2.quant),
sum(tbl3.quant),
from tbl1, tbl2, tbl3
where (tbl1.code=tbl2.code) and (tbl1.code=tbl3.code) and
(code=...)
....


 
Becket ©   (2003-02-21 00:57) [8]

2 Johnmen
По времени одинаково выходит.


2 AM
Вообще MySQL пока не поддерживает UNION :(
Но общают когда-нибудь сделать :)

2 All
Спасибо, видимо, придется пока остаться при своем...


 
fidget ©   (2003-02-21 13:33) [9]

> Вообще MySQL пока не поддерживает UNION :(
> Но общают когда-нибудь сделать :)

они сделали это больше года назад в 4.0

как насчет индексов? они есть? используются?



Страницы: 1 вся ветка

Текущий архив: 2003.03.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-39410
KDS
2003-03-03 13:11
2003.03.13
Работа с датами, вычислить диапазон


3-39150
ddd
2003-02-20 12:10
2003.03.13
delphi вместо ibconsole


14-39529
Ruf
2003-02-24 10:15
2003.03.13
заблокировать инет


1-39414
Cool Cooler
2003-03-03 10:20
2003.03.13
Вопрос про параметры


1-39284
nester
2003-03-03 22:23
2003.03.13
Как сделать так, чтобы форма не отображалась в TaskBar