4秒這是我的主查詢:加快此查詢?目前,它發生在100K行
exec sp_executesql N'set arithabort off;set transaction isolation level read uncommitted;Select COUNT(*) From (Select ROW_NUMBER() OVER
(Order By Case When d.OldInstrumentID IS NULL THEN d.LastStatusChangedDateTime Else d.RecordingDateTime End desc) peta_rn,
d.DocumentID
From Documents d
Inner Join Users u on d.UserID = u.UserID Inner Join IGroupes ig on ig.IGroupID = d.IGroupID
Inner Join ITypes it on it.ITypeID = d.ITypeID Where 1=1 ANd dbo.DoesNameExist(d.DocumentID, @0, @1, @2, @3) = 1 And (CreatedByAccountID = @4
Or DocumentStatusID = @5
Or DocumentStatusID = @6))
v',N'@0 int,@1 varchar(4000),@2 varchar(4000),@3 nvarchar(4000),@4 int,@5 int,@6 int',@0=-999,@1='K',@2='Miller',
@3=NULL,@4=44,@5=5,@6=9
,這是我的標量函數在罪魁禍首:
ALTER FUNCTION [dbo].[DoesNameExist]
(
@DocumentID int,
@PartyTypeID int = 0,
@FirstName varchar(30),
@LastName varchar(30),
@Business varchar(100)
)
RETURNS bit
AS
BEGIN
Declare @Found bit = 0
Set @FirstName = IsNull(@FirstName,'')
Set @LastName = IsNull(@LastName,'')
Set @Business = IsNull(@Business,'')
Select Top 1 @Found = 1
From DocumentNames
Where DocumentID = @DocumentID
And
Lower(IsNull(FirstName,'')) Like
Case When @FirstName = '' Then Lower(IsNull(FirstName,'')) + '%'
Else Lower(@FirstName) + '%' End
And
Lower(IsNull(LastName,'')) Like
Case When @LastName = '' Then Lower(IsNull(LastName,'')) + '%'
Else Lower(@LastName) + '%' End
And
Lower(IsNull(Business,'')) Like
Case When @Business = '' Then Lower(IsNull(Business,'')) + '%'
Else Lower(@Business) + '%' End
And
PartyTypeID = Case When @PartyTypeID IS NULL OR @PartyTypeID <= 0 Then PartyTypeID Else @PartyTypeID End
Return @Found
END
基本上一個文檔有多個DocumentNames和當用戶在LastName或FirstName中鍵入某些內容時,我想要帶有這些匹配名稱的所有文檔的計數。請注意,我正在查詢Documents表格,然後加入DocumentNames。這是必要的。
注:索引在所有的搜索欄,其中包括創建名字,姓氏等
謝謝!
,如果您將函數體到主SQL語句會發生什麼?通常UDF是罪魁禍首,因爲引擎無法優化性能並最終做全表掃描 – cha 2013-03-06 06:20:44
@cha:我很欣賞這個建議。但是,如何將它移入SQL語句中? – Jack 2013-03-06 06:23:52
你能澄清一下嗎 - 你的第一個SQL只返回COUNT,而不是文檔列表。簡單看看你做了什麼,如果你使用IF EXISTS而不是調用你的函數,看起來你可以得到實質性的改進,因爲它看起來就是這樣做的。 – 2013-03-06 06:33:50