Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Вниз

Ускориние работы СУБД   Найти похожие ветки 

 
Alex Chu   (2002-08-19 16:26) [0]

Согласен, что вопрос стар, как Мир...
Но не нашел на него ответа на ibase.ru
Есть БД на Ib6, которая написана достаточно сносно, но скорость обработки даже простых запросов, сравнительно с sybase, оставляет желать лучшего...
Как ускорить работу (увидеть максимум возможностей) этой субд?
Может, есть какие специфичные настройки иль ешо что?..

пример:
create view RRR (a,b,c) as
select o.ordno, o.ord_price,
(
select sum(w1.wc_value)
from wincalc w1, windows w
where w1.wc_paramid=650
and w.windowid=w1.windowid and w.orderid=o.orderid
) as c
from orders o
where o.ord_payment>=o.ord_price

а запрос select sum(c) from RRR

Так вот этот запрос выполняется около 30 сек при смешном кол-ве записей (объем всей БД около 20 Мб)...


 
Desdechado   (2002-08-19 16:44) [1]

подзапросы в ИБ обрабатываются медленнее, да и вообще это не очень эффективный подход - вьюхи создавать. сделай хранимую процедуру, которая будет по условию отбирать и возвращать данные. имхо, быстрее будет.

а еще много зависит от глубины индексов - на это влияет размер страницы БД


 
Romkin   (2002-08-19 17:44) [2]

я бы сделал так

create procedure RRR (wc_paramid integer)
returns (ordno <тип>, ordprice <тип>, asum <тип>)
as
declare variable TMPSum <тип>;
declare variable windowid integer;
declare variable orderid integer;
begin
for select ordno, ord_price, orderid
from orders o
where o.ord_payment>=o.ord_price
into :ordno, :ord_price, :orderid
do begin
asum = 0;
for select windowid
from windows
where orderid = :orderid
into :windowid
do begin
select sum(wc_value)
from wincalc
where wc_paramid = :wc_paramid
and windowid = :windowid
into :TMPSum;

asum = asum + tmpsum;
end
suspend;
end
end

вызов select * from RRR(:wcParamID), и для каждого запроса подобрать план
можно и так:

create procedure RRR (wc_paramid integer)
returns (ordno <тип>, ordprice <тип>, asum <тип>)
as
declare variable orderid integer;
begin
for select ordno, ord_price, orderid
from orders o
where o.ord_payment>=o.ord_price
into :ordno, :ord_price, :orderid
do begin
select sum(w1.wc_value)
from wincalc w1, windows w
where w1.wc_paramid = :wc_paramid
and w1.windowid = w.windowid and w.orderid=:orderid
into :asum;
suspend;
end
end


 
ShuraGrp   (2002-08-19 18:31) [3]

Если во вьюхе использовать Sum и т.п., то индексы вообще не используются


 
evgeg   (2002-08-19 19:43) [4]

Правильно люди говорят.В IB другое устройство.
View лучше вообще не использовать.
Делать надо все через хранимые процедуры. For select в IB крутой.



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

Форум: "Базы";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-27049
Nikola62
2002-08-27 13:29
2002.09.09
Как перечеркнуть линией TPanel


1-26986
Krann
2002-08-29 16:33
2002.09.09
Данные по Tcp


1-26945
Геральт
2002-08-28 22:04
2002.09.09
MainForm


1-27011
Yaro
2002-08-30 03:37
2002.09.09
Выравнивание в ячейке StringGrid a


1-26959
lovres
2002-08-27 13:23
2002.09.09
Нужен компанент типа xlReport, но для работы с Word





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский