Оптимизирую запрос для ТП по журналу документов.
Есть 2 варианта реализации фильтра по видам документов:
select top 20
Жур.Date_Time_IDDoc as Позиция,
Жур.row_id as row_id,
Жур.IDDoc as Документ,
Жур.IDDocDef as Документ_вид,
...
from _1SJourn as Жур (NOLOCK)
INNER JOIN
FVD_4245 as FilterDK (NOLOCK) ON
Жур.IDDocDef = FilterDK.DocKindNum AND FilterDK.Used = 1
....
where (Жур.DATE_TIME_IDDOC BETWEEN '20071125' AND '20071125Z')
order by Жур.Date_Time_IDDoc, Жур.row_id
и
select top 20
Жур.Date_Time_IDDoc as Позиция,
Жур.row_id as row_id,
Жур.IDDoc as Документ,
Жур.IDDocDef as Документ_вид,
...
from _1SJourn as Жур (NOLOCK)
....
where
Жур.IDDocDef in (SELECT FilterDK.DocKindNum FROM FVD_4245 as FilterDK (NOLOCK) WHERE FilterDK.Used = 1) AND
(Жур.DATE_TIME_IDDOC BETWEEN '20071125' AND '20071125Z')
order by Жур.Date_Time_IDDoc, Жур.row_id
В действительности запрос меняется в зависимости от наложеных фильтров.
Таблица FVD_4245 содержит 2 колонки: DocKindNum и Used. Пояснений, я думаю, не надо
![Улыбка Улыбка](https://www.1cpp.ru/forumfiles/Templates/Forum/default/smiley.gif)
Второй вариант также пробовал сделать со списком видов документов.
Выражение порядка также может содержать Жур.IDDocDef, если отмечен всего один вид документов.
У меня первый вариант работает быстрее, однако, стандартный журнал с включеным отбором пользуется вторым вариантом (там просто сравнение идёт на один вид документов) и он ещё быстрее.
Подскажите, pls какой алгоритм с вашей точки зрения быстрее и предпочтительнее. Может надо к-либо индексы наложить на таблицы? К сожалению, теорию не приходилось изучать, а практики в этой области пока не хватает