sql优化的进入的误区

1 篇文章 0 订阅

如题,近期做新作一个项目,有个CR是让对sql语句进行优化,提高运行效率。

具体的sql这里就不写了,因为不是本文要写的重点。这里用select * from dual来代替《这里认为是sql1》。

本以为是对这个sql进行优化就可以了,但是经过了两天修改,一无所获。

后来无奈只能请教同事,才发现问题并不在此。

因为在这句sql执行过后,下面的代码间接的使用了sql1执行的结果集。

并且对这个结果集合中的某些字段重新查询:

例如下面的sql就对结果集合中的InvoiceType这个字段进行判断,并使用了这个findSysParaName()方法(这个方法里面是一个sql查询《这里可以认为是sql2》)得到结果,并重新写入到第一条sql的结果集合中。

tmp[1]= !StringUtils.isEmpty(obj.getInvoiceType()) ? obj.getInvoiceType()+" "+findNameFacadeImpl.findSysParaName("VD", "INVOICE_TYPE", obj.getInvoiceType()) : "";

所以执行过程中下面的sql就会执行多次,从而影响了效率:解决办法就是将下面的sql2加入到上面的 sql1《我这里使用左链接》中.从而使得程序只执行sql1一次,提高了效率。

举个例子:

<sql1>

select name from people;

<sql2>

select age from employee where name=name <sql1的结果>

那么我们将两个sql结合在一起:

select name ,age from people left join employee on employee .name=people.name <sql1的结果>

最终程序完成优化。

就将这么多吧,其实就是一开始进入了一个sql优化所带来的一个误区。这里就总结出一个经验教训,以后如果出现很多自己没有把握解决的问题,尽早的请教同事或者他人,从而不至于在误区里面徘徊不前。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值