以下查询速度更快(1:05):
SELECT DATEPART(DW,DATEFROMPARTS(
FLOOR(20180501/10000)
,FLOOR(20180501-FLOOR(20180501/10000)*10000)/100
,FLOOR(20180501-FLOOR(20180501/100)*100)))
GO 1000
比(1:10):
SELECT DATEPART(DW,CAST(CAST(20180501 AS nvarchar) AS DATE))
GO 1000
为什么?
我有一张表,其中包含大约20亿条记录,因此区别变得很重要。硬编码日期背后还有更多逻辑。否则,如果存在一种在性能方面更好的方法来执行相同的逻辑,请随时纠正我。
日期列始终是整数,并且并不总是具有相同的格式。检索两种格式YYYYMMDD和YYYYMM。我知道,有点混乱。
谢谢!
答案 0 :(得分:1)
每月的第一天(YYYYMM01)为星期一时删除重复的行
如果您想加快删除速度,请创建一个临时表(如果执行此操作则为或永久表 ),该表的数据类型与表的“日期”列相同,且所有第一个星期一XX年中每个月的时间。确保数据格式与您在问题中提到的格式相同。确保此列具有索引(聚集)。现在,在查询中将此表用作筛选器,而无需进行任何转换,这将使Sql Server可以利用现有表的“日期”列上存在的任何索引。