SELECT * WHERE not null 的最快方法

Posted

技术标签:

【中文标题】SELECT * WHERE not null 的最快方法【英文标题】:Fastest way to do SELECT * 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 应该具有相同的执行时间,因为它们都在做同样的事情。可能第三个可能与其他人有一些不同。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于SELECT * WHERE not null 的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent OR WHERE IS NOT NULL

润乾报表中对数据集添加过滤条件:ds1:select grade ,count(*) a from rpt_xd where grade is not null

SQL EXISTS vs. Aggregate IS NOT NULL

快速掌握MySQL数据库中SELECT语句[2]

mysql中is null 与 = null

NOT IN 子句中的 NULL 值