加快我的 SQL 查询速度?它给出了执行超时错误
Posted
技术标签:
【中文标题】加快我的 SQL 查询速度?它给出了执行超时错误【英文标题】:Speed up my SQL Query? It is giving execution time out error 【发布时间】:2020-02-14 06:03:39 【问题描述】:我在下面创建了这个查询,它计算每个日期的总和。这个查询给了我正在寻找的确切结果,但它的数据非常大。如何加快或优化它?
IF OBJECT_ID('TEMPDB..#temp')IS NOT NULL
DROP TABLE #temp
IF OBJECT_ID('TEMPDB..#temp1')IS NOT NULL
DROP TABLE #temp1
Declare @DateFrom DateTime
Set @DateFrom = CONVERT(DATE,DATEADD(D,-datepart(d,getdate())+1,DATEADD(M,-1,GETDATE())))
Declare @DateTo DateTime
Set @DateTo = CONVERT(DATE,DATEADD(D,-DATEPART(D,getdate()),GETDATE()))
Select
Date
,[Item No_]
,case when Sum(ILE.Quantity)>0 and [Posting Date]=Date then Sum(ILE.Quantity) else 0 end AS [In Quantity],
case when Sum(ILE.Quantity)<0 and [Posting Date]=Date then Sum(ILE.Quantity) else 0 end AS [Out Quantity],
(Sum(ILE.Quantity))Closing
into #temp
from Calender C left Join [Snowman Logistics Limited$Item Ledger Entry]ILE on Cast(ILE.[Posting Date]as date)<=C.Date
Group by Date,[Item No_],[Posting Date]
Select Date,[Item No_]
,SUm([In Quantity])[In Quantity],Sum([Out Quantity])[Out Quantity],Sum(Closing)Closing from #temp where Date Between @DateFrom and @DateFrom
group by Date,[Item No_]
【问题讨论】:
尝试先使用窗口函数***.com/questions/860966/…获取运行总计,然后将结果与日历表连接。 【参考方案1】:你可以试试:
-
在您对匹配项感兴趣的第一个查询中 - 您可以尝试使用
INNER JOIN
,如果您仍然需要 [dates]-[items]
,即使在 [Snowman Logistics Limited$Item Ledger Entry]
表中的指定时间段内没有它们的条目,您可以稍后;
为什么需要将 [Posting Date]
转换为日期 - 如果它是字符串而不是日期/日期时间类型,则应更改它以便在计算期间跳过显式(或隐式)转换
如果1
没问题,你可以使用INNER JOIN
,你可以尝试创建indexed view并预先计算初始查询
在您的第一个查询中,您按[Posting Date]
对记录进行分组,而在第二个查询中,您再次对记录进行分组,不包括它 - 您不能合并查询吗?
Select
Date
,[Item No_]
,case when Sum(ILE.Quantity)>0 and [Posting Date]=Date then Sum(ILE.Quantity) else 0 end AS [In Quantity],
case when Sum(ILE.Quantity)<0 and [Posting Date]=Date then Sum(ILE.Quantity) else 0 end AS [Out Quantity],
(Sum(ILE.Quantity))Closing
into #temp
from Calender C
left Join [Snowman Logistics Limited$Item Ledger Entry]ILE
on Cast(ILE.[Posting Date]as date) <= C.Date
where Date Between @DateFrom and @DateFrom
Group by Date,[Item No_]
1234563将读取更少的数据(更少的 IO)。
【讨论】:
以上是关于加快我的 SQL 查询速度?它给出了执行超时错误的主要内容,如果未能解决你的问题,请参考以下文章