1

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

4

1 回答 1

4

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

根据您想要的结果重新表述,问题变得更像这样:“检查列中是否至少有一个 NULL 的最有效方法是什么?”

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

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

true如果列中至少有一个,这将返回一个带有 in 的单行NULL,如果根本没有NULLs,则返回没有行。您也可以使用它,但我怀疑 Postgres 足够聪明,可以在两种情况下执行大致相同的“查询计划”:

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

无论哪种方式,最大的性能因素将是 ; 上是否有索引column_x。没有它,Postgres 将不得不按照您的设想扫描表格的每一行。但是,有了索引,它应该能够查看索引并或多或少地立即得出答案。

于 2013-09-08T01:10:59.413 回答