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()等
阅读量:91
阅读量:28
阅读量:113
阅读量:95
阅读量:43