Вадимко писал(а) 10. Июня 2009 :: 07:37:ol писал(а) 09. Июня 2009 :: 08:57:Вадимко писал(а) 09. Июня 2009 :: 08:51:Я пользовал левое соединение, показалось удобнее модифицировать
а по скорости отличаются ?
не проверял честно говоря
на глаз - быстро, соединение не по индексированным полям
данных всего несколько тысяч записей
ну да, я уж выложил результаты; скорость выполнения на глаз пропорциональна размеру временной таблицы. вот думаю, удовлетворит или нет.
Создание индексов не помогает
здесь уже снова просить консультацию у Кирилла
действую так:
ЗапросОлеДБ.Выполнить("EXECSCRIPT('INDEX ON dtos(TmpTable.Период)+TmpTable.Номенклатура TAG Пер ')");
а затем
select
TmpTable.Номенклатура,
TmpTable.Период,
статок,
t1.КоличествоНачальныйОстаток+t1.КоличествоПриход-t1.КоличествоРасход)) КоличествоНачальныйОстаток,
from TmpTable
left join TmpTable t1 on dtos(t1.Период)+t1.Номенклатура<dtos(TmpTable.Период)+TmpTable.Номенклатура
group by ...
уходит в задумчивость ~40 c
select
TmpTable.Номенклатура,
TmpTable.Период,
статок,
t1.КоличествоНачальныйОстаток+t1.КоличествоПриход-t1.КоличествоРасход)) КоличествоНачальныйОстаток,
from TmpTable
left join TmpTable t1 on dtos(t1.Период)+t1.Номенклатура<dtos(TmpTable.Период)+TmpTable.Номенклатура
group by ...
тогда как в этом же запросе соединение
left join TmpTable t1 on t1.Период<TmpTable.Период
and t1.Номенклатура=TmpTable.Номенклатура
отрабатывает меньше секунды