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 是无序的)。同样,您只能减少从较小的集合创建哈希表的磁盘使用量。
我正在尝试提高以下运行约 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 是无序的)。同样,您只能减少从较小的集合创建哈希表的磁盘使用量。