说我有下表
-----------------------------
-- ID | DATE --
-- 01 | 1577836799998 --
-- 02 | 1577836799999 --
-- 03 | 1577836800000 --
-- 04 | 1577836800001 --
-----------------------------
我希望选择相对于时间戳的所有数据ID。在操作员之前(1)或之后(2)转换时间戳是否更有效?这对效率有何影响?
((1)
SELECT ID
FROM TABLE
WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'
((2)
SELECT ID
FROM TABLE
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))
是后者(2)吗?因为它只需要转换一次比较时间戳,而不必转换表中的每个日期进行比较?
您正在询问其中哪个更有效:
WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))
首先,它们可能导致相同的执行计划,因此可能没有区别。
也就是说,第二个非常可取。为什么?数据具有有关列的信息,例如:
这些可用于选择最佳查询计划。因此,使用第二种方法可以有更多选择,因为与作为函数参数的列相比,“ bare”列更好地理解。