oracle 优化sql,改写SQL使用索引
*普通索引列 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。
阅读量:145
阅读量:69
阅读量:21
阅读量:59
阅读量:40