Форум: "Базы";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизВыборка из нескольких таблиц. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c