查询条件不要使用函数
建议 where 条件中的列尽量不使用函数运算,因为加函数运算会造成智能索引失效,sql 性能降低
示例
原始 sql 为:
where substr(product_no, 2, 1) in ('3', '4', '5', '8')
智能索引失效,性能非常低。 改写为:
where (product_no like '13%' or product_no like '14%' or product_no like '15%' or product_no like '18%')'
智能索引将对字符串类型数据前 8 个字符的索引。
避免操作字段表达式后进行比较
1. 使用智能索引且最有效的方法是字段与常量表达式直接操作的形式:
(rownumtag>=100*10); 改成 (rownumtag+1>=100*10+1);
上述SQL就无法使用智能索引。
2. 其次一边是字段,另一边是常量表达式(常量当然也可以),常量表达式无 论多么复杂都没有问题,因为它只需要计算一遍。
表达式与常量进行比较的条件不能用智能索引。 如:
SELECT ... FROM ... WHERE ceil(rownumtag / ceil(TO_NUMBER('100'))) ='10' ;
改为:
SELECT ... FROM ... WHERE rownumtag>100*9 AND rownumtag<=100*10