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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
1-27095
Мефодий
2002-08-28 12:37
2002.09.09
Ошибка


3-26860
GIL
2002-08-19 03:02
2002.09.09
Порча индексного файла


14-27219
dikiimouse
2002-08-15 17:41
2002.09.09
Помоните!!! Пишу прогу на VB, запускаю на другом компе, а она не.


3-26909
Programmer1
2002-08-16 14:02
2002.09.09
Upgrade базы данных Paradox


14-27186
Turalyon
2002-08-14 08:49
2002.09.09
Нашествие зеленых человечков