Oracle SQL中的NOT Equal(< >)忽略索引和NULL值行

xfb7svmp  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(161)

我有一个查询,需要过滤的基础上不等于值在Oracle SQL。不能使用EQUAL作为未知列的可能值。
查询:

SELECT * from employee where name <> 'John';

上面的查询忽略了name列中的索引,并且不返回name列中为null的行。
解决方案尝试NULL安全返回。

SELECT * from employee where name is null OR name <> 'John';

SELECT * from employee where nvl(name, 'NOT John') <> 'John';

上面的两个查询能够过滤掉空行。但无法使用名称列中定义的索引。
请指示。

fruv7luv

fruv7luv1#

索引的目的是快速找到特定的值。关于“不相等”的条件通常不通过索引获得。NULL值没有索引,因此也没有任何好处。
如果使用BITMAP INDEX,则会使用索引。然而,BITMAP索引有其他限制,它取决于您的应用程序和数据是否有用。

相关问题