我有一张几百万行的表。我可以使用什么查询来扫描并查看其中是否有任何列的X值为空值,然后在postgresql中检测到空值时停止?
答案 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将必须按照您的想象扫描表格的每一行。但是,对于索引,它应该能够查看索引并立即得出答案。