oracle 优化sql,改写SQL使用索引

2025-11-12 08:10:12

*普通索引列 a is not null 按逻辑改为a>0或a>''

*like操作改写

*能用union all绝不用union,除非要去重 

*in操作虽然简单易懂,但oracle内部会转换为表连接查询,使用in会多一步转换操作,所以建议使用表关联查询

*not in 强烈建议使用not exists或(外连接+判断为空)

*<>(不等于)操作不走索引,推荐a<>0改为(a>0 ora<0)    a<>’’改为a>’’

*提防隐式类型转换, oracle内部处理a=0与a=‘0’是完全不同的,甚至会导致不走索引,这个深有体会,最近一个项目就是这个隐式类型转换出了问题,导致速度

很慢

  * 如果要在索引列查询is not null条件,建议列加上is not null约束,默认值约束,

create index idx01_t_tab1 on t_tab1(last_ddl_time,1);--加了个常量  

*用合适的函数索引来避免看似无法避免的全表扫描,CREATE INDEX IDX02_T_TAB    1 ON T_TAB1(reverse(object_name)) ,此外经常用到的函数索引还有,instr(),subs   tr()等

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢