【发布时间】:2018-09-05 20:30:30
【问题描述】:
以下查询更快(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。我知道,有点乱。
谢谢!
【问题讨论】:
-
旁注 为什么不创建
Date类型的新列或计算列?使用整数(或任何其他非日期类型)来存储日期被认为是不好的做法。 -
你转换它们是为了什么?过滤/显示/ETL ?
-
Igor 的重点是使用 DATE 数据类型,而不是不断地转换为日期。这会影响你的表现,并且是使用正确数据类型的数百个论点之一。
-
Delete duplicate rows when the first day of the month (YYYYMM01) is monday -
@Igor 是的,我得到了这个按日期和 customer_id 索引的表。听起来不错!谢谢!我会测试它!
标签: sql-server tsql sql-server-2017