6
如何有效地检查多个列上的EXISTS?
这是我定期遇到的一个问题,尚未找到一个好的解决方案。 假设下面的表结构 CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) 要求是确定可为空的列中的任何一个B或C实际上是否包含任何NULL值(以及是否包含任何值)。 还要假设该表包含数百万行(并且没有可用的列统计信息,因为我对此类查询的更通用解决方案感兴趣)。 我可以想到几种解决方法,但都有缺点。 两个单独的EXISTS语句。这样的好处是,一旦NULL找到a,查询就可以立即停止扫描。但是,如果两列实际上都不包含,NULL则将进行两次完整扫描。 单一汇总查询 SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) AS C FROM T 这可能会同时处理两个列,因此最糟糕的情况是一次完整扫描。缺点是,即使NULL在查询的两个很早就在两列中都遇到了a …