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

问题描述 投票:0回答:1

我有一个查询需要根据 Oracle SQL 中的 NOT Equal 值进行过滤。不能使用 EQUAL 作为条件作为未知列的可能值。 询问: 选择 * from employee where name <> 'John';

上面的查询忽略了 name 列中的索引,并且不返回 name 列中具有 null 的行。

Solution Tried for NULL safe return。 SELECT * from employee where name is null OR name <> 'John'; SELECT * from employee where nvl(name, 'NOT John') <> '约翰';

以上两个查询都可以过滤掉空行。 但无法使用名称列中定义的索引。

请指教

sql oracle indexing sql-execution-plan sqlperformance
1个回答
0
投票

索引的目的是快速找到一个特定的值。 “不等于”的条件通常不会因索引而增加。

NULL
值没有索引,所以也没有任何好处。

如果你使用

BITMAP INDEX
,它看起来会有所不同,那里会使用索引。但是,BITMAP 索引还有其他限制,它是否有用取决于您的应用程序和数据。

© www.soinside.com 2019 - 2024. All rights reserved.