1、数据库表的设计要合理
2、合理的加索引。
3、SQL优化的原理只有一个那就是尽可能的缩小查询范围,这样效率肯定会有提高,而且oracle本身对我们所写的SQL能够优化,所以我们要做的就是尽可能的缩小查询范围.大多数需要优化的SQL都是多表连接的查询,而多表连接也包括横向连接,纵向连接,我们使用最多的就是纵向连接。
横向连接一般是指两个表的字段结构基本一样,要把一个表的数据某些记录变成另一个表的一些记录,即Rows+Rows。纵向连接即我们从A表取一些要查询的字段,从B表取一些要查询的字段,然后将A、B表取出来的表用公共的部分纵向连接起来,即Columns+Columns。
横向连接语句: select a.column1,a.column2 from tableA a union all select b.column1,b.column2 from tableB b
注意,横向连接时,列个数必须相同,而且相对应的字段列数据类型必须相同。其实你就可以把要union的表认为是一个是另一个复制,完全相同。有人可能会问了,要是我要合并的列的的确有不同的列啊, 或者有一列根本就没有,那你可以采用一下方式
select d.dname,d.loc from dept1 d union all select '' dname, e.loc from dept e,看“'' dname”,我们不难发现,可以找个替代品,用空字符串(如果类型是字符串。number类型可给个数字比如 1。若出现特殊情况,可用null代替)代替没有的字段,这样就可以合并了。
纵向连接语句: select a.column1,a.column2 from tableA a full outer join select b.column3,b.column4 from tableB b on a.aid=b.bid where ......,这是全外连接格式。这个速度的确挺快,但查询可能你不喜欢,因为有些结果行可能你根本不想看到。
一般情况下我们left outer join,right outer join用的比较多,这两个的区别就是left outer join以on后面处在左边的连接字段所对应表为主,right outer join刚好相对。当然你也可以使用left join, right join。在使用过程中还是发现外连接相对快些。
要加快纵向连接查询效率,办法就是嵌套查询。以下是项目中实际的一个例子:
--------------------------------------------------------------------------
Select c.customerid,c.receivedmoney,c.tollcollector,c.receiveddate,c.yearmonth,c.receivedlatefee,c.receivedfee,c.receivedappend,c.jmman,c.jmmoney,c.name,d.chargeint
from
(select a.customerid,a.receivedmoney,a.tollcollector,a.receiveddate,a.yearmonth,a.receivedlatefee,a.receivedfee,a.receivedappend,a.jmman,a.jmmoney,b.name
from
(select rf.customerid,rf.receivedmoney,rf.tollcollector,rf.receiveddate,rf.yearmonth,rf.receivedlatefee,rf.receivedfee,rf.receivedappend,rf.jmman,rf.jmmoney
from sf_receivedfee rf where rf.electriccompanyid='1000000001' and rf.dealsign=0 and rf.yearmonth in(200811,200901,200903,200804,200805,200806,200807)and rf.customerid=1000052545
)a
left outer join
(select xe.employeeid,xe.name from xt_employee xe
) b
on a.tollcollector=b.employeeid
) c
left outer join
(select cp.chargeint,cp.customerid from sf_chargeprotocol cp where cp.customerid=1000052545
) d
on c.customerid=d.customerid
-------------------------------------------------------------------------------
参考文章来源:
http://www.downcodes.com/info/2009/11/27/20091127-11008.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22350698/viewspace-624103/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22350698/viewspace-624103/