现在的位置: 首页 > 综合 > 正文

sql优化的进入的误区

2014年01月08日 ⁄ 综合 ⁄ 共 836字 ⁄ 字号 评论关闭

如题,近期做新作一个项目,有个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优化所带来的一个误区。这里就总结出一个经验教训,以后如果出现很多自己没有把握解决的问题,尽早的请教同事或者他人,从而不至于在误区里面徘徊不前。

抱歉!评论已关闭.