假设我有下面的表格
-----------------------------
-- 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)吗?因为它只需要转换一次比较时间戳,而不需要转换表中的每个日期进行比较?
发布于 2020-01-18 02:00:00
您在问以下哪种方法更有效:
WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))首先,它们可能导致相同的执行计划,因此可能没有区别。
也就是说,第二种方法要好得多。为什么?数据包含有关列的信息,例如:
可用indexes
的
这些可用于选择最佳查询计划。因此,使用第二种方法有更多的选择,因为“裸”列比作为函数参数的列更容易理解。
https://stackoverflow.com/questions/59791516
复制相似问题