【问题标题】:Fastest way to do SELECT * WHERE not nullSELECT * WHERE not null 的最快方法
【发布时间】:2017-09-01 10:39:08
【问题描述】:

我想知道获取所有非空行的最快方法是什么。我想到了这些:

SELECT * FROM table WHERE column IS NOT NULL

SELECT * FROM table WHERE column = column

SELECT * FROM table WHERE column LIKE '%'

(我不知道如何在 SQL 和/或 Hive 中测量执行时间,并且通过在 pgAdmin 中反复尝试 4M 行表,我没有得到明显的区别。)

【问题讨论】:

  • 一旦你使用LIKE,将不会使用任何索引....顺便说一句column = column对我来说没有任何意义
  • 万一最直接的选项比其他选项慢,请提交错误报告。
  • @bub column = column 为真,除非 columnNULL,因为 NULL = NULL 未知。
  • 我希望前两个具有相同的执行时间,因为它们本质上是在做同样的事情并评估同一列。也许执行计划,看看?我可以告诉你,Oracle 在这两个之间的 sexec 计划上完全没有区别
  • 据我所知,SQL 在解决它之前首先对每个查询应用启发式算法。因此 Query-1 和 Query-2 应该具有相同的执行时间,因为它们都在做同样的事情。可能第三个可能与其他人有一些不同。

标签: sql hive null query-optimization hiveql


【解决方案1】:

在 Hive 上运行这些查询时,您永远不会注意到性能上有任何差异,因为这些操作非常简单并且在并行运行的映射器上运行。

初始化/启动映射器所花费的时间比这些查询的可能执行时间差异要多得多,并且在总执行时间中增加了很多启发式方法,因为映射器可能正在等待资源并且根本没有运行。

但您可以尝试测量时间,有关如何测量执行时间的答案请参见:https://stackoverflow.com/a/44872319/2700344

SELECT * FROM table WHERE column IS NOT NULL 更直接(可理解/可读),尽管所有查询都是正确的。

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多