我已经阅读了很多不使用负运算符(例如NOT IN和NOT EXISTS)以及如何将逻辑反转为正运算符,例如使用IN而不是NOT IN可以带来非常好的性能。
无论如何,我对很多 CASE WHEN 运算符和检查一些条件有一个看法。我想知道(我仍然能够找到任何专门针对此的文章、问题或示例)在使用IS NOT NULL和IS NULL时会产生性能差异吗?
我已经阅读了很多不使用负运算符(例如NOT IN和NOT EXISTS)以及如何将逻辑反转为正运算符,例如使用IN而不是NOT IN可以带来非常好的性能。
无论如何,我对很多 CASE WHEN 运算符和检查一些条件有一个看法。我想知道(我仍然能够找到任何专门针对此的文章、问题或示例)在使用IS NOT NULL和IS NULL时会产生性能差异吗?
两者都可以作为索引查找来执行。
其中一个寻找索引的开头,读取所有行,NULL
然后在遇到第一个行时停止,NOT NULL
另一个寻找第一个NOT NULL
值,然后读取索引的整个其余部分。
除非索引被覆盖,否则在任何一种情况下都不能使用搜索,因为它归结为选择性。如果您有很多NULL
值,因此NOT NULL
具有高度选择性,您可能需要考虑按照此处的示例在该列上创建过滤索引。