Здраствуйте...
Lotsia PDM Plus ver. 4.30
Имеется отчет отображающий входящие документы:
Глубина поиска: Вся база данных
Тип отбора:Отбор по условиям отчета
Разделы: 1 раздел -> Подчиненная
Ограничение по типу объекта: Тип объекта=Документ
Сортировки: Нет
Атрибуты: Тип документа="Входящий"
Отчет:14 атрибутов различных типов+2 вычисляемых поля(одно показывает номер строки, второе из атрибута "номер документа" вырезает непосредственно номер...отчет сортируется по этому вычисляемому полю(тип число) )
Фильтр: имеется фильтр по аргументам
*********
col3 >= nach and col3 <= finish and ( lower(col6) like if (IsNull( autor ) or autor = '', '%', '%'+ lower(autor) +'%')) and (lower(col2) like if (IsNull(Docnum) or Docnum = '', '%', '%'+lower(DocNum)+'%') ) and (lower(col4) like if (IsNull(KontrNumber) or KontrNumber = '', '%', '%'+lower(KontrNumber)+'%') ) and (lower(col7) like if (IsNull(soder) or soder = '', '%', '%'+lower(soder)+'%')) and (lower(col5) like if (IsNull( kontr ) or kontr = '', '%', '%'+ lower(kontr) +'%')) and (lower(col11) like if (IsNull( status ) or status = '', '%', '%'+ lower(status) +'%'))
*********
по умолчанию срабатывает только фильтр "col3 >= nach and col3 <= finish " ограничивая дату регистрации документов текущим годом.
отчет формируется от 40 сек до 1 минуты взависимости от мощности компьютера.
если убрать вычисляемое поле вырезающее номер отчет строится быстрее на 10 сек, но кардинально это ситуации не улучшает.
количество объектов в базе: 16345
количество объектов типа "документ":3623
отчет выбирает 365 строк.
.......
подскажите что можно сделать, чтобы отчет формировался быстрее. Приемлимым считаю формирование такого отчета за 5-10 сек.
Буду признателен за любую помощь. Спасибо.
Медленно формируется отчет
- Maestro
- Новый участник
- Сообщения: 6
- Зарегистрирован: 24 фев 2009, 15:56
- Используемое ПО: Lotsia PDM PLUS
- Откуда: г. Нижневартовск
- Контактная информация:
Re: Медленно формируется отчет
В общем решение удалось найти самостоятельно, а именно построить пользовательский отчет.
Я не большой спец в SQL и у меня получился такой вот запрос:
select O_R.id as isobject_id ,O_R.description as Name
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000003400001' ) as TP
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000003100001' ) as DT_reg
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='11' ) as isp
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063000001' ) as kontr
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000002100001' ) as number
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='-30' ) as soder
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063100001' ) as Autor
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063400001' ) as res
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000063300001' ) as srok_isp
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000056700001' ) as KontrNumber
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000065000001' ) as DT_KontrNumber
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000044500001' ) as status
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000003200001' ) as Dt_finish
from lsdbo.object_reference_view O_R
where O_R.type_id='100000003000001'
order by DT_reg Desc
где в каждом подзапросе строка
AV1.attrib_id ='100000044500001'
это код выбираемого атрибута, а строка
where O_R.type_id='100000003000001'
это тип выбираемых объектов
так же в отчете сделал тот же фильтр по аргументам. он, как оказалось, вообще не влияет на скорость формирования отчета.
теперь вместо 50 сек отчет формируется за 10-11.
....
PS если у кого есть предложения по оптимизации этого решения, то прошу в студию
Я не большой спец в SQL и у меня получился такой вот запрос:
select O_R.id as isobject_id ,O_R.description as Name
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000003400001' ) as TP
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000003100001' ) as DT_reg
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='11' ) as isp
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063000001' ) as kontr
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000002100001' ) as number
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='-30' ) as soder
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063100001' ) as Autor
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000063400001' ) as res
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000063300001' ) as srok_isp
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000056700001' ) as KontrNumber
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000065000001' ) as DT_KontrNumber
,(select VS1.value from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000044500001' ) as status
,(select VDT1.value from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000003200001' ) as Dt_finish
from lsdbo.object_reference_view O_R
where O_R.type_id='100000003000001'
order by DT_reg Desc
где в каждом подзапросе строка
AV1.attrib_id ='100000044500001'
это код выбираемого атрибута, а строка
where O_R.type_id='100000003000001'
это тип выбираемых объектов
так же в отчете сделал тот же фильтр по аргументам. он, как оказалось, вообще не влияет на скорость формирования отчета.
теперь вместо 50 сек отчет формируется за 10-11.
....
PS если у кого есть предложения по оптимизации этого решения, то прошу в студию

- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Медленно формируется отчет
Код: Выделить всё
select O_R.id as isobject_id,
O_R.description as Name,
(select VS1.value
from lsdbo.attrib_value_view AV1,lsdbo.value_string_view VS1
where O_R.id=AV1.object_ID and VS1.id=AV1.value_id and AV1.attrib_id ='100000003400001' ) as TP,
(select VDT1.value
from lsdbo.attrib_value_view AV1,lsdbo.value_datetime_view VDT1
where O_R.id=AV1.object_ID and VDT1.id=AV1.value_id and AV1.attrib_id ='100000003100001' ) as DT_reg
from lsdbo.object_reference_view O_R
where O_R.type_id='100000003000001'
order by DT_reg Desc
Код: Выделить всё
SELECT rw.id as isobject_id,
rw.description as Name,
vv1.value as TP,
vv2.value as DT_reg
FROM lsdbo.object_reference_view rw left join lsdbo.object_type_view tw on rw.type_id=tw.id left join
lsdbo.attrib_value_view av1 on rw.id=av1.object_id and av1.attrib_id=100000003400001 left join
lsdbo.value_string_view vv1 on av1.value_id=vv1.id and av1.attrib_id=100000003400001 left join
lsdbo.attrib_value_view av2 on rw.id=av2.object_id and av2.attrib_id=100000003100001 left join
lsdbo.value_datetime_view vv2 on av2.value_id=vv2.id and av2.attrib_id=100000003100001
where rw.type_id = '100000003000001'
order by vv2.value Desc
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Maestro
- Новый участник
- Сообщения: 6
- Зарегистрирован: 24 фев 2009, 15:56
- Используемое ПО: Lotsia PDM PLUS
- Откуда: г. Нижневартовск
- Контактная информация:
Re: Медленно формируется отчет
Здраствуйте, Александр.
Изучил Ваше предложение. Должен сказать что конструкцией left join пользуюсь очень редко и подобное построение запроса мне просто не пришло в голову.
Я составил точно такой же запрос(с тем же количеством полей) как и в моем отчете и оказалось что конструкция с left join в SQL Managment studio работает почти в три раза дольше... 36 против 13 секунд.
Но в любом случае спасибо за участие. Я долго ломал голову над тем как выбрать одним запросом несколько разнотипных атрибутов, а теперь знаю аж 2 способа.
Изучил Ваше предложение. Должен сказать что конструкцией left join пользуюсь очень редко и подобное построение запроса мне просто не пришло в голову.
Я составил точно такой же запрос(с тем же количеством полей) как и в моем отчете и оказалось что конструкция с left join в SQL Managment studio работает почти в три раза дольше... 36 против 13 секунд.
Но в любом случае спасибо за участие. Я долго ломал голову над тем как выбрать одним запросом несколько разнотипных атрибутов, а теперь знаю аж 2 способа.
- Александр
- Активный участник
- Сообщения: 1658
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Re: Медленно формируется отчет
ну и третий способ ))
сделайте из своего запроса функцию в бд
удалите из запроса все _view
дайте права на функцию группе PartyP
и наслаждайтесь скоростью))
и вызов из Лоции только не увлекайтесь мелкими функциями - лучше на них выстроить свою систему запросов - используя их совместно, а за правами (_view) следить на этапе вызова функций а не в запросе на этапе выборки (_view) как предлагает Лоция
сделайте из своего запроса функцию в бд
удалите из запроса все _view
дайте права на функцию группе PartyP
и наслаждайтесь скоростью))
Код: Выделить всё
create function [LSDBO].[Ric_Get_моя_функция]
(@TypeID numeric(18,0)=0 --тип объекта
)
Returns table
as
return
(
SELECT rw.id as isobject_id,
rw.description as Name,
vv1.value as TP,
vv2.value as DT_reg
FROM lsdbo.object_reference rw left join lsdbo.object_type tw on rw.type_id=tw.id left join
lsdbo.attrib_value av1 on rw.id=av1.object_id and av1.attrib_id=100000003400001 left join
lsdbo.value_string vv1 on av1.value_id=vv1.id and av1.attrib_id=100000003400001 left join
lsdbo.attrib_value av2 on rw.id=av2.object_id and av2.attrib_id=100000003100001 left join
lsdbo.value_datetime vv2 on av2.value_id=vv2.id and av2.attrib_id=100000003100001
where rw.type_id = @TypeID
)
Код: Выделить всё
select * from LSDBO.Ric_Get_моя_функция(100000003000001) order by DT_reg Desc
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Старик Крупский
- Активный участник
- Сообщения: 803
- Зарегистрирован: 27 июл 2006, 22:17
- Откуда: Москва
Re: Медленно формируется отчет
Э-э-э...
Или я не прав?
Но предложение Александра, вроде как дает юзерам неограниченный доступ к данным, которыми функция наполняет свою табличку, через альтернативные интерфейсы (через тот же Excel, который есть у практически всех). И тут с ограничением доступа можно распрощаться. Это я так, на всякий случай говорю.как предлагает Лоция
Или я не прав?
"Лучше меньше, да лучше" (C)