从表中检索行的最简单方法,其中至少有一个值为NULL

时间:2016-01-26 17:03:40

标签: sql sql-server sqlperformance

使用MSSSQL我有一个包含20多列的表,我想要检索至少有一个列值为NULL的行。哪种方式最有效,或者你必须写这样的东西?:

Select * from tableName where col1 is null or col2 is null or col3 is null....

谢谢!

2 个答案:

答案 0 :(得分:1)

考虑到SQL Server需要检查每一行中的每一列以进行确定(至少在给定列中找到NULL值之前)。这意味着无论您如何组织查询,它都将进行全表扫描。所以,虽然可能会有更漂亮的"如何进行查询,在性能方面我怀疑你会发现任何更快的东西。

@Denis建议的计算列是一个例外,但这是因为SQL Server提前做了相同的工作(甚至更多的工作,因为现在它必须写出持久性指数)。在这一点上,性能影响对您来说最重要的问题是 - 找到这些列,或者每次写入表格。

答案 1 :(得分:0)

最有效的方法是预先计算这些值(持久计算列)(如果这适合您的情况),然后索引它们并进行查询。这是背后的想法:

CREATE TABLE #temp
(
    col1 int,
    col2 int,
    col3 int,
    col_calculated AS CASE WHEN col1 IS NULL OR col2 IS NULL OR col3 IS NULL THEN 0 ELSE 1 END PERSISTED
);

CREATE INDEX IX_TEMP_COLCALCULATED ON #temp(col_calculated);

INSERT INTO #temp VALUES(1, 2, 3), (5, 6, NULL);

SELECT * FROM #temp WHERE col_calculated = 0;