提问人:atanu2destiny 提问时间:5/11/2023 最后编辑:jarlhatanu2destiny 更新时间:5/11/2023 访问量:352
Oracle SQL 中的 NOT Equal(<>) 忽略索引和 NULL 值行
NOT Equal(<>) in Oracle SQL is ignoring Index and NULL valued rows
问:
我有一个查询,需要根据 Oracle SQL 中的 NOT Equal 值进行过滤。不能将 EQUAL to 条件用作 unknown 中列的可能值。
查询:
SELECT * from employee where name <> 'John';
上面的查询忽略了名称列中的索引,并且不返回名称列中具有 null 的行。
解决方案:尝试进行 NULL 安全返回。
SELECT * from employee where name is null OR name <> 'John';
SELECT * from employee where nvl(name, 'NOT John') <> 'John';
上面两个查询能够过滤掉空行。 但不能使用 name 列中定义的索引。
请指教。
答:
2赞
Wernfried Domscheit
5/11/2023
#1
索引的目的是快速找到特定值。“不相等”的条件通常不会通过指数获得收益。 值未编制索引,因此也没有好处。NULL
如果您使用 ,则看起来会有所不同,那里将使用索引。但是,BITMAP 索引还有其他限制,它是否有用取决于您的应用程序和数据。BITMAP INDEX
评论
0赞
atanu2destiny
5/11/2023
右。是否有任何替代语法或提示可用于实现与使用定义的索引相同的不相等功能
2赞
Wernfried Domscheit
5/11/2023
正如 @Littlefoot 在评论中所说,为什么您认为使用索引时查询运行得更快?在某些情况下,FULL TABLE SCAN 比索引扫描更快 - 您的查询就是这种情况的典型示例。
评论
name