FB 2.5
Запрос
select
t_bill.id_bill,
t_bill.itogo,
t_bill.datan,
v_summy_billov.total as summa_billa
from t_bill
inner join v_summy_billov on (t_bill.id_bill = v_summy_billov.id_bill)
план
PLAN JOIN ((V_SUMMY_BILLOV SUMMY_BN T_OTGRUZ NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_PLATEZHI NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_PLATA_ZA_HRANENIE NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_OTPUSK_TOVARA NATURAL), T_BILL INDEX (PK_T_BILL))
Время подготовки запроса = 31ms
Время выполнения запроса = 0ms
Ставлю left join (разница в количестве записей которые после этого будут в результате 2-3) и время выполнения запроса сразу увеличивается в разы т.е. запрос
select
t_bill.id_bill,
t_bill.itogo,
t_bill.datan,
v_summy_billov.total as summa_billa
from t_bill
left join v_summy_billov on (t_bill.id_bill = v_summy_billov.id_bill)
план
PLAN JOIN (T_BILL NATURAL(V_SUMMY_BILLOV SUMMY_BN T_OTGRUZ NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_PLATEZHI NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_PLATA_ZA_HRANENIE NATURAL)
PLAN (V_SUMMY_BILLOV SUMMY_BN T_OTPUSK_TOVARA NATURAL))
Время подготовки запроса = 32ms
Время выполнения запроса = 982ms
понятно что во втором запросе не используется первичный индекс таблицы t_bill, но может ктонибудь подскажет что делать? как сделать выполнение второго запроса быстрее?
в таблице t_bill - только PK , v_summy_billov - представление :
with summy_bn as
(select t_otgruz.id_bill, t_otgruz.summa_bn as total
from
t_otgruz
union all
select t_platezhi.id_bill, t_platezhi.rash_bn as total
from t_platezhi
union all
select t_plata_za_hranenie.id_bill, t_plata_za_hranenie.summa as total
from t_plata_za_hranenie
union all
select t_otpusk_tovara.id_bill, t_otpusk_tovara.zatrati as total
from t_otpusk_tovara )
select summy_bn.id_bill, sum(summy_bn.total)
from summy_bn
group by summy_bn.id_bill