1
我有一個存儲過程,它從列表框,微調框輸入框和複選框中選擇數據,它執行完美,但它需要大約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
那麼如何減少呢?
爲什麼甲骨文標籤? – Aleksej
請勿使用動態SQL。查詢引擎無法緩存執行計劃。使用此方法沒有性能優勢。 – EastOfJupiter
我會使用3個子存儲過程,並取消動態SQL。 –