不在 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很小。
但我会反驳并要求对请求的理由,因为使用索引并不总是最好的做法
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很小。
但我会反驳并要求对请求的理由,因为使用索引并不总是最好的做法