목록 상자, 회 전자 입력 상자 및 확인란에서 데이터를 선택하는 저장 프로 시저가 있지만 완벽하게 실행되지만 실행에 약 2.30 분이 걸리므로 오류가 발생합니다. 신청.SQL Server에서 저장 프로 시저의 실행 시간을 줄이는 방법
오류는 제한 시간이
만료되었습니다. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다.
그러면 저장 프로 시저의 시간을 어떻게 줄일 수 있습니까?
이 저장 프로 시저 코드 : 나는 방법을 다음 저장 프로 시저를 실행하면
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_SearchCAMAStructure]
@section as nvarchar(max),
@quality as nvarchar(max),
@style as nvarchar(max),
@ward as nvarchar(max),
@improvment as nvarchar(max),
@condition as nvarchar(max)
AS
BEGIN
SET NOCOUNT ON;
Declare @Where as varchar(max)
Declare @Select as varchar(max)
Set @Select = ' Distinct vi.struct_no as structure, a.assesmt_no as assessment, o.own_last+'' , ''+o.own_first as taxpayer, id.year_built as built, id.effect_age as age, vi.aprais_val as mktvalue
From [dbo].assessments a
inner join parcel p on a.parcel_no = p.parcel_no
inner join valueimp vi on vi.assesmt_no = a.assesmt_no
inner join owner o on o.id = a.owner_id
inner join imp_details id on id.improvementId = vi.id and (id.isdeleted is null or id.isdeleted = 0)
inner join quality_details qd on qd.quality_id = id.quality_id
inner join section_details sd on sd.section_id = id.section_id
inner join style_details stdl on stdl.style_id = id.style_id
inner join parcel pw on p.ward_no = pw.ward_no'
Set @Where = ' where sd.section_id =ISNULL(@section,sd.section_id)
AND qd.quality_id = ISNULL(@quality,qd.quality_id)
AND stdl.style_id = ISNULL(@style,stdl.style_id)
AND pw.ward_no = ISNULL(@ward,pw.ward_no)
AND id.improvementId = ISNULL(@improvment,id.improvementId)'
if @condition = 1 --Equal to
Begin
Set @Where = @Where + ' and (' [email protected]+ ' is null or id.effect_age = ' [email protected]+ ')'
end
else
if @condition = 2 --Greater than or Equal
Begin
Set @Where = @Where + 'and (' [email protected]+ ' is null or id.effect_age > ' [email protected]+ ')'
end
else
if @condition = 3 --Less than or equal
Begin
Set @Where = @Where + 'and (' [email protected]+ ' is null or id.effect_age < ' [email protected]+ ')'
end
DECLARE @QUERY NVARCHAR(MAX)
SET @QUERY= 'Select '+ @SELECT + @WHERE
print @QUERY
EXEC sp_executesql @QUERY , N'@section as nvarchar(max) ,@quality as nvarchar(max),@style as nvarchar(max),@ward as nvarchar(max),@improvment as nvarchar(max)',@section ,@quality,@style,@ward,@improvment
END
그것이
EXEC usp_SearchCAMAStructure null,null,null,null,null,null
실행
의를 위해 많은 시간을 소요는 그럼 어떻게 그것을 줄이기 위해?
왜 오라클 성능을 향상시킬 수 where 절에서 불필요한
ISNULL()
기능을 대체하는 꼬리표? – Aleksej동적 SQL을 사용하지 마십시오. 쿼리 엔진은 실행 계획을 캐시 할 수 없습니다. 이 방법을 사용하면 성능상의 이점이 없습니다. – EastOfJupiter
나는 3 개의 하위 저장 프로 시저를 사용하고 동적 SQL을 사용하지 않을 것이다. –