sql - 优化多列的空检查方式

标签 sql sql-server

假设我有一个包含三列的表,我想获取至少一个列值不为 null 的所有行,现在我正在使用 coalesce() 下面的方法进行空值检查,它工作正常

with Test_name AS(

    select null as id , null as f_name , null as l_name
    union ALL
    select 1,'fname1', null
    union ALL
    select null,null,null
) select tn.* from Test_name tn where coalesce(id,f_name,l_name) is not null

预期的输出,这给了我我的查询

1,'fname1', null

我想知道是否有更好的方法来进行空值检查

最佳答案

您可以通过三种方式检查该行是否有非 NULL 值:

  1. COALESCE(col1, col2, col3) 不为空
  2. col1 不为空或 col2 不为空或 col3 不为空
  3. ISNULL(col1, ISNULL(col2, ISNULL(col3, NULL))) 不为空

您可以使用 Microsoft SQL Server Management Studio 来比较多个查询。

比较结果:

  • COALESCEIS NOT NULL:57% 到 43%
  • COALESCEISNULL:56% 比 44%
  • IS NOT NULLISNULL:49% 到 51%

因此,使用 IS NOT NULL 是检查某行是否包含不包含 NULL 值的列的最快方法。在可读性方面,COALESCE 可以比 IS NOT NULLISNULL 比较短得多。您可以在可读性和速度之间做出决定。

关于sql - 优化多列的空检查方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126168/

相关文章:

SQL Server - PK 删除性能不佳

php - 将两个 sql 查询合并到一个查询中工作太慢

python - Django:确定用户是否投票

sql - 如果一个表中为空,则从其他中选择

php - 如何检索错误的字符集编码字符串?

SQL 和在多个表上存储外键与通过表连接进行查询

sql - 如何在数组大小大于1的postgres中获取数组

C# sql 创建一个连接并为每个查询打开和关闭

sql - 如何在 SQL Server 上计算以 2 列作为参数的表中的值的数量?

SQL 日期逻辑子句