我有一个查询,需要过滤的基础上不等于值在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';
上面的两个查询能够过滤掉空行。但无法使用名称列中定义的索引。
请指示。
1条答案
按热度按时间fruv7luv1#
索引的目的是快速找到特定的值。关于“不相等”的条件通常不通过索引获得。
NULL
值没有索引,因此也没有任何好处。如果使用
BITMAP INDEX
,则会使用索引。然而,BITMAP索引有其他限制,它取决于您的应用程序和数据是否有用。