DATEADD 函数在链接服务器查询上有严重的性能下降
DATEADD function have severe performance degradation on linked server query
我正在 运行从我们的内部部署 SQL 服务器查询,该服务器通过链接服务器链接到 Azure 数据库,我 运行 以下查询以毫秒为单位:
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE CAST(senttovpn AS DATE) = '7 aug 2016'
GO
由于服务器时间比我们当前时间晚 1 小时,我想在时间戳中添加一个小时,因此 运行 以下查询:
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE CAST(DATEADD(hour, 1, senttovpn) AS DATE) = '7 aug 2016'
GO
然而,这需要 1 分 19 秒才能 运行。谁能告诉我为什么这种退化如此严重,什么是最好的 SQL 解决方案?
使用 SARGable 谓词和 ISO-8601 时间格式来定义范围值。
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE senttovpn >= cast('20160806 23:00:00.000' as datetime)
AND senttovpn < cast('20160807 23:00:00.000' as datetime)
GO
我正在 运行从我们的内部部署 SQL 服务器查询,该服务器通过链接服务器链接到 Azure 数据库,我 运行 以下查询以毫秒为单位:
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE CAST(senttovpn AS DATE) = '7 aug 2016'
GO
由于服务器时间比我们当前时间晚 1 小时,我想在时间戳中添加一个小时,因此 运行 以下查询:
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE CAST(DATEADD(hour, 1, senttovpn) AS DATE) = '7 aug 2016'
GO
然而,这需要 1 分 19 秒才能 运行。谁能告诉我为什么这种退化如此严重,什么是最好的 SQL 解决方案?
使用 SARGable 谓词和 ISO-8601 时间格式来定义范围值。
SELECT *
FROM [Cloud].[website].[dbo].[Topup]
WHERE senttovpn >= cast('20160806 23:00:00.000' as datetime)
AND senttovpn < cast('20160807 23:00:00.000' as datetime)
GO