SQL效率

问题描述 投票:0回答:1

说我有下表

-----------------------------
-- 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)吗?因为它只需要转换一次比较时间戳,而不必转换表中的每个日期进行比较?

sql query-performance
1个回答
0
投票

您正在询问其中哪个更有效:

WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))

首先,它们可能导致相同的执行计划,因此可能没有区别。

也就是说,第二个非常可取。为什么?数据具有有关列的信息,例如:

  • 可用索引
  • 可用分区
  • 统计

这些可用于选择最佳查询计划。因此,使用第二种方法可以有更多选择,因为与作为函数参数的列相比,“ bare”列更好地理解。

© www.soinside.com 2019 - 2024. All rights reserved.