SQL 里的格式转换,用得太多真挺坑性能的。是写复杂查询的时候,一个TO_NUMBER或者TO_CHAR埋在WHERE里,基本就把索引给废了。文章《在查询时尽量少用格式转换-ORACLE_SQL 性能优化(全)》讲得蛮实在,场景、代码、问题点都有,建议你看看。

性能卡顿的 SQL,大多跟WHERE里的格式转换脱不了关系。举个例子:

WHERE TO_NUMBER(substr(a.order_no, instr(b.order_no, '.') - 1)) = TO_NUMBER(substr(a.order_no, instr(b.order_no, '.') - 1))

看着就头疼吧?而如果能直接写成WHERE a.order_no = b.order_no,不光读得清爽,响应也快。这样一改,索引能用上,查询速度嗖嗖的。

想了解更多实战优化案例,可以顺手看看这些:

如果你写ORACLE的时候发现索引老是失效,或者慢得离谱,嗯,多半是格式转换惹的祸。能不用就不用,是在WHEREJOIN条件里。调性能就是这种细节活儿,省一个转换,省几千毫秒。