我有一张有几百万行的表。我可以使用什么查询来扫描并查看它们中的任何一个是否具有列 X 的空值,然后在 postgresql 中检测到空值时停止?
问问题
73 次
1 回答
4
你是在程序上而不是关系上思考:你不会“扫描”任何东西;DBMS 可能会在内部扫描数据,但这是为了优化。
根据您想要的结果重新表述,问题变得更像这样:“检查列中是否至少有一个 NULL 的最有效方法是什么?”
对于这个问题,我的回答是这样的:
SELECT true AS null_detected FROM some_table WHERE column_x IS NULL LIMIT 1;
true
如果列中至少有一个,这将返回一个带有 in 的单行NULL
,如果根本没有NULL
s,则返回没有行。您也可以使用它,但我怀疑 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 回答