不在 select 查询中

not in in select query

select * from emp where job_type<>'ANALYST';

我的项目中有类似的查询。我被告知要找到其他方法来删除不等于,因为如果这样做就不会使用索引。

我没有其他过滤条件,我可以做一些变通来愚弄优化器吗?

我被告知要找到其他方法来删除不等于,

通常是个糟糕的建议。应根据所需的功能编写查询。也就是说,可能 ANALYST 占据了你 table 中的绝大部分数据,因此你可以这样做:

select * from emp where job_type < 'ANALYST' or job_type > 'ANALYST'

优化器可以在内部将其转换为适当索引上的联合。或者,如果您 事先知道 不同值的列表,您可能会得到类似

的东西
select * from emp where job_type in (...)

或者如果他们在 parent table 中,例如

select * from emp where job_type in 
  ( select job_type from valid_job_types here job_type != 'ANALYST' )

假设EMP很大,VALID_JOB_TYPES很小。

但我会反驳并要求对请求的理由,因为使用索引并不总是最好的做法