如果在x列中检测到任何Null值,我如何告诉postgres扫描并停止?

时间:2013-09-08 00:57:00

标签: postgresql

我有一张几百万行的表。我可以使用什么查询来扫描并查看其中是否有任何列的X值为空值,然后在postgresql中检测到空值时停止?

1 个答案:

答案 0 :(得分:4)

你在程序上而不是在关系上思考:你不会扫描"为了任何东西; DBMS可能会在内部扫描数据,但这是为了优化。

根据您想要的结果重新措辞,问题变得更像这样:&#34;检查列中是否至少有一个NULL的最有效方法是什么?&#34; < / p>

对于这个问题,我的回答是:

SELECT true AS null_detected FROM some_table WHERE column_x IS NULL LIMIT 1;

如果列中至少有一个true,则会返回包含NULL的单行,如果根本没有NULL则不返回任何行。你也可以使用它,但我怀疑Postgres会足够智能地执行大致相同的查询计划&#34;在这两种情况下:

SELECT true AS null_detected WHERE EXISTS (SELECT 1 FROM some_table WHERE column_x IS NULL);

无论哪种方式,最大的表现因素是column_x上是否有索引;如果没有它,Postgres将必须按照您的想象扫描表格的每一行。但是,对于索引,它应该能够查看索引并立即得出答案。