Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оптимизация запроса  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
В базе sql сервера создана одна талица сугубо для получения аналитических данных (76temp)
По задаче нужно выгрузить список договоров которые являются лонгированными
В идеале нужно получит таблицу с полями LB2,LB3,Vid,Datecontract,Dateend,Сумма платежей по всем договорам, Сумма по лонгированным, Количество всех и количество лонгированных

Но пока даже сам запрос на выгрузку лонгированных договоров расчитывается больше 20 минут

Может кто подскажет как можно оптимизировать запрос?
Уровень знаний пока начальный..

declare @datecontractfrom nvarchar (8), @datecontracttill nvarchar (8),@lb1 nvarchar (50)
set @dateCONTRACTfrom = '20140101'
set @dateCONTRACTtill = '20140401'
set @lb1 = N'%ндив%'


		select  t2.lb2 as 'lb2', t2.lb3 as 'lb3',t1. [Vid],
		         t2.DateContract as 'DateContract_new', t1.Dateend as 'Dateend_old',  sum(t2.[76]) as 'Начислено',
                               COUNT  (distinct t2.contractnumber) as 'Количество'
                             FROM [REPORT].[dbo].[76temp] as t1
                               inner join [_REPORT].[dbo].[76temp] as t2
                                  on t1. [INSURER] = t2. [INSURER] 
	                            where (t2.[ContractNumber] != t1.[ContractNumber]) and  (t1. [Vid] = t2. [Vid] )  and (t1.Object = t2.Object)
	                                    and t1.RegistrationNumber =t2.RegistrationNumber   and t2.lb1 like @lb1
		                         and (t2.[Datecontract] BETWEEN  @dateCONTRACTfrom and  @dateCONTRACTtill)
			             and (datediff(day,t1.Dateend ,t2.DateContract) <=120)
		           group by  t2.lb2 ,t2.lb3,t1. [Vid],t2.DateContract, t1.Dateend
25 апр 14, 10:57    [15933914]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Дурачина
Guest
А на таблице есть какие-то индексы?
25 апр 14, 11:49    [15934383]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Индексы таблицы. Может нужно добавить поле?

К сообщению приложен файл. Размер - 39Kb
25 апр 14, 12:03    [15934523]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
Дурачина
Guest
googlogmob,

Попробуй добавить индекс по полям INUSER, Vid, Object, RegistrationNumber
25 апр 14, 12:35    [15934798]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Добавил индексы но без результата
Попробывал таким образом, тоже не то
Может будут какие-то свежие идеи
Подумываю создать две временные таблицы, которые и будут джойниться, может будет быстрее..


declare @datecontractfrom nvarchar (8), @datecontracttill nvarchar (8),@dateENDfrom nvarchar (8), @dateENDtill nvarchar (8), @lb1 nvarchar (50), @vid nvarchar (50)
set @dateCONTRACTfrom = '20140101'
set @dateCONTRACTtill = '20140401'

set @dateENDfrom = '20131201'
set @dateENDtill = '20140501'


set @lb1 = N'%ндив%'
set @vid = N'%наземного транспорту, кр%'



			select  t2.lb2 as 'lb2', t2.lb3 as 'lb3',t1. [Vid],
			t2.DateContract as 'DateContract_new', t1.Dateend as 'Dateend_old',  sum(t2.[76]) as 'Начислено', COUNT (distinct t2.contractnumber) as 'Количество'
             FROM [REPORT].[dbo].[76temp] as t1
            inner join [REPORT].[dbo].[76temp] as t2
              on t1. [INSURER] = t2. [INSURER] and  (t1. [Vid] = t2. [Vid] )  and (t1.Object = t2.Object)
	             and t1.RegistrationNumber =t2.RegistrationNumber 
	             where (t2.[ContractNumber] != t1.[ContractNumber])   and t2.lb1 like @lb1
				and (t2.[Datecontract] BETWEEN  @dateCONTRACTfrom and  @dateCONTRACTtill) 	
				and t1.Dateend BETWEEN  @dateENDfrom and  @dateENDtill and t1.Dateend <= t2.DateContract
				--and (datediff(day,t1.Dateend ,t2.DateContract) <=120)
				   group by  t2.lb2 ,t2.lb3,t1. [Vid],t2.DateContract, t1.Dateend
25 апр 14, 16:15    [15936729]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить