![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выборка из нескольких таблиц. [D6, MySQL]
Becket © (2003-02-20 22:42:00)Наверняка вопрос очень простой, но для меня актуальный.
Есть несколько таблиц (5), выбираю из низ необходимые данные, из каждой. Затем нужно свести их в один отчет, по совпадающим ключевым полям.
Не могу догнать, как оптимизировать этот процесс.
У меня получается очень долго.
Какой алгоритм посоветуете?
fidget (2003-02-21 13:33:00) [1]> Вообще MySQL пока не поддерживает UNION :(
> Но общают когда-нибудь сделать :)
они сделали это больше года назад в 4.0
как насчет индексов? они есть? используются?
Becket (2003-02-21 00:57:00) [2]2 Johnmen
По времени одинаково выходит.
2 AM
Вообще MySQL пока не поддерживает UNION :(
Но общают когда-нибудь сделать :)
2 All
Спасибо, видимо, придется пока остаться при своем...
AM (2003-02-21 00:07:00) [3]А я думал у тебя идет один запрос...
Я не знаю MySQL, но если он поддерживает вложенные запросы и
" UNION ALL " то все что ты делаешь можно сделать с помощью одного запроса...
Johnmen (2003-02-21 00:07:00) [4]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-20 23:59:00) [5]Ну примерно вот так :)
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:00) [6]Если это запрос типа "SELECT ..."
Таблиц не более 5-ти.
Из твоих слов понятно, что вложенность запросов не совсем большая...
5-7 минут - это очень много, если конечно у тебя количество строк в таблицах не по несколько сотен тысяч, количество столбцов несколько сотен и процессор какой-нибудь Pentium-166.
Попробуй перезагрузи компьютер и/или сервер...
Johnmen (2003-02-20 23:48:00) [7]А как выглядит сам процесс ? :)
Becket (2003-02-20 23:42:00) [8]MySQL
Минут 5-7.
KIR (2003-02-20 22:56:00) [9]Какой СУБД пользуешься?
Долого, это сколько?