我正在运行一个SQL语句,如下所示。这最终将用于每天使用日期交易填充报告表。当我在没有
的情况下运行它Cast(M._CreateDateTime as Date) = @StartDate
需要1:40。 将函数返回到where子句中需要10分钟。
Declare @StartDate DAte = GetDate()
If Object_ID ('tempdb.dbo.#WinBack') is not null Drop Table #WinBack
Select
M.HospitalMasterID
,M.TxnSite
,P.ClientID
,M.PatientID
,M.TxnDate as CallDate
,M.TxnCode
,M.EnteredMasterID
,U.UserName
,U.UserDept
Into
#WinBack
From
Avimark_OLTP.dbo.MedicalHistory as M
Inner JoinAvimark_OLTP.dbo.Patient as P on
M.HospitalMasterID = P.HospitalMasterID and
M.PatientID = P.PatientID
Left Outer Join RptSys.dbo.Ref_User as U on
M.EnteredMasterID = U.UserMastID
Where
Cast(M._CreateDateTime as Date) = @StartDate and
M.TxnCode = 'RemCall' and
U.UserName is not null
有没有人对如何提高速度有任何建议?我知道这是杀死它的演员。
谢谢,
答案 0 :(得分:1)
使用列的函数可以使SQL Server在表中比较和阻止索引使用的每一行中进行转换,你应该这样做:
Declare @StartDate Date, @EndDate Date
set @StartDate = GetDate()
set @EndDate = dateadd(day, 1, @StartDate)
select
...
where
M._CreateDateTime >= @StartDate and
M._CreateDateTime < @endDate