周六值班写写接口,刚好有一个需求是从表中获取id,id是主键,业务说明如下
id:当天最大编号,格式”L” ||to_char(sysdate,'yyyymmdd') || XXXX,XXXX标识4位数字组成的字符串
先看看id大概长什么样子
然后这种需求查询的sql写法就有很多了,可能
1.select 'L'||nvl(substr(max(id),2)+1,to_char(sysdate,'yyyymmdd')||'0001') id from wzgl_ckgl_rkd_tb
where substr(id,2,8)=to_char(sysdate,'yyyymmdd')
查询花费0.219秒,哦?这好像不太美妙
换一个写法
select 'L'||nvl(substr(max(id),2)+1,to_char(sysdate,'yyyymmdd')||'0001') id from wzgl_ckgl_rkd_tb where id like 'L'||to_char(sysdate,'yyyymmdd')||'%'
这个写法花费0.001秒就完成了同样的操作
同样两个sql,ID为主键,对ID做函数操作,优化器不能走索引了。改写成右模糊则可以通过id索引进行查询,所以尽量少在条件索引列使用函数进行操作。