mssql 日期字段性能问题

mssql date field performance issues

我正在尝试提高以下运行约 3 秒的查询的性能。我是 SQL 中执行计划分析和索引的新手。

我已经在 DateFrom 和 DateTo 文件上建立了索引(2 个独立索引和 1 个组合索引)。我尝试在 DateLiveActual 文件上创建索引,但是 none 这些索引显示在执行计划中。

你能帮我优化查询吗?

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 是无序的)。同样,您只能减少从较小的集合创建哈希表的磁盘使用量。