mssql日期字段性能问题
问题描述:
我想在下面的查询运行约3秒imporve性能。我不熟悉SQL中的执行计划分析和索引。mssql日期字段性能问题
我已经有DateFrom和DateTo文件(2个独立索引和一个组合索引)的索引。我试图在DateLiveActual文件上创建索引,但这些索引都没有出现在执行计划中。
你能帮我优化查询吗?
declare @today date = convert(date,GETUTCDATE());
DBCC DROPCLEANBUFFERS
SELECT
S.LocationId
,SBP.CurrencyId
,SUM(CASE
WHEN S.ServiceStatusId = 1 THEN COALESCE (SBP.MRR, 0)
ELSE 0
END) AS ActiveMRR
,MIN(S.DateLiveActual) AS MinServiceDateLiveActual
FROM dbo.service_Service AS S
INNER JOIN dbo.billing_ServiceBillingPeriod AS SBP ON SBP.ServiceId = S.Id
WHERE
SBP.DateFrom <= @today AND (SBP.DateTo >= @today OR SBP.DateTo IS NULL)
GROUP BY S.LocationId, SBP.CurrencyId
答
我觉得没有什么可以做。正如你可以从执行计划中的箭头粗细得出结论,你的where子句不是很有选择性。你可以尽量减少使用较小的索引树从billing_ServiceBillingPeriod读取的字节数:
CREATE INDEX IX_DateRange
ON billing_ServiceBillingPeriod(DateFrom, DateTo)
INCLUDE (CurrencyId,ServiceID,MRR)
没有多少你可以用HASH做加盟,如果有许多行(粗箭头)。合并连接速度更快,但需要有序的结果集(如果使用日期,记录按日期排序,service_Service.Id是无序的)。同样,您只能减少磁盘使用量,从较小的集合中创建哈希表。
该索引改进了1秒的性能,感谢您的输入..但是Min(DateLiveScheduled)需要1秒。无论如何,我们可以加快速度。实际上它在service_Service表上,所以SQL默认采用PK的索引。 – Raghav