OleDb
три варианта фильтра по фирме
(Номенклатура, Фирма - это заранее созданные курсоры)
(1)
select
$РегОстатки.Номенклатура Номенклатура
from $РегистрИтоги.ОстаткиТМЦ РегОстатки
inner join Номенклатура on "+СтрПредМесяцНач+"+Номенклатура.val=
dtos(РегОстатки.period)+$РегОстатки.Номенклатура
inner join Фирма on Фирма.val=$РегОстатки.Фирма
where
dtos(РегОстатки.period)+$РегОстатки.Номенклатура like "+СтрПредМесяцНач+"+'_________'
(2)
select
$РегОстатки.Номенклатура Номенклатура
from $РегистрИтоги.ОстаткиТМЦ РегОстатки
inner join Номенклатура on "+СтрПредМесяцНач+"+Номенклатура.val=
dtos(РегОстатки.period)+$РегОстатки.Номенклатура
where
dtos(РегОстатки.period)+$РегОстатки.Номенклатура like "+СтрПредМесяцНач+"+'_________'
and $РегОстатки.Фирма in (select val from Фирма)
(3)
select
$РегОстатки.Номенклатура Номенклатура
from $РегистрИтоги.ОстаткиТМЦ РегОстатки
inner join Номенклатура on "+СтрПредМесяцНач+"+Номенклатура.val=
dtos(РегОстатки.period)+$РегОстатки.Номенклатура
left join $Справочник.Фирмы СправочникФирмы on СправочникФирмы.id=$РегОстатки.Фирма
where
dtos(РегОстатки.period)+$РегОстатки.Номенклатура like "+СтрПредМесяцНач+"+'_________'
and СправочникФирмы.id in (select val from Фирма)
какой выполняется быстрее ?
неожиданно оказался под номером (3). Самый медленный - (1)
если же убрать индексное соединение
inner join Номенклатура on "+СтрПредМесяцНач+"+Номенклатура.val=
dtos(РегОстатки.period)+$РегОстатки.Номенклатура
самым быстрым станет (2), а (1) и (3) станут примерно одинаковыми по скорости.
Даже не знаю что спросить, так пытаюсь сваять конструктор запросов к регистру остатков (ВТ нема), сталкиваюсь с такими подводными камнями