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
为真,除非 column
为 NULL
,因为 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