Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-39483
Jony
2003-02-27 13:15
2003.03.13
Почему


3-39179
mib431
2003-02-20 23:31
2003.03.13
Что я не так делаю с ODBC?


3-39214
z_olga_al
2003-02-22 09:31
2003.03.13
Замена даты в табл.Paradox


1-39312
Alexey_ural
2003-03-04 14:46
2003.03.13
Безформенное, но не консольное приложение


1-39324
Иксик
2003-03-03 15:44
2003.03.13
Получить результат выполнения команды DOS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский