是 where x = 0 或 x is null 被替换为 where isnull(x, 0) = 0 resp。其中 NVL(x, 0) = 0

ber*_*d_k 0 null oracle sql-server

将 x 视为包含 null、0、1 的列。只有不到 1% 的行包含 1。0 和 Null 之间没有逻辑差异。

坚持在这里使用 isnull 而不是 NVL 是个好主意吗(性能)?

Joe*_*Joe 6

如果您纯粹是从性能角度来看哪个更好……我只会测试您的两种方法,看看哪种方法对您的数据更快。

...但由于无论如何您只有三种状态,并且这是在 where 子句中进行的,因此检查它是否不是第三种情况可能会更快,然后您就不需要 NVL 测试了:

column <> 1
Run Code Online (Sandbox Code Playgroud)

或者,如果真的没有区别(并且 NULL 不是“我们不知道,所以我们出于所有实际目的将它视为 0,但我们偶尔需要知道它何时未知”的情况) ),只需更新表并将其设置为 0,即当前为 NULL。(并调整 NULL 中的任何内容)