首页
学习
活动
专区
圈层
工具
发布

SQL效率
EN

Stack Overflow用户
提问于 2020-01-18 00:40:40
回答 1查看 38关注 0票数 0

假设我有下面的表格

代码语言:javascript
复制
-----------------------------
-- ID     | DATE           --
-- 01     | 1577836799998  --
-- 02     | 1577836799999  --
-- 03     | 1577836800000  --
-- 04     | 1577836800001  --
-----------------------------

我希望选择与时间戳相关的所有数据ID。在操作符之前转换时间戳(1)还是在操作符之后转换时间戳(2)更有效?这对效率有何影响?

(1)

代码语言:javascript
复制
SELECT ID
FROM TABLE
WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'

(2)

代码语言:javascript
复制
SELECT ID
FROM TABLE
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))

会是后者(2)吗?因为它只需要转换一次比较时间戳,而不需要转换表中的每个日期进行比较?

EN

回答 1

Stack Overflow用户

发布于 2020-01-18 02:00:00

您在问以下哪种方法更有效:

代码语言:javascript
复制
WHERE DATEADD(MS, DATE, '1970-01-01') > '2020-01-01'
WHERE DATE > DATE_PART('EPOCH_MILLISECOND', TO_TIMESTAMP('2020-01-01'))

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

也就是说,第二种方法要好得多。为什么?数据包含有关列的信息,例如:

可用indexes

  • Available partitions

  • Statistics

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59791516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档