ORACLE数据库多表关联查询效率问题解决⽅案
最近在做项⽬中遇到多表关联查询排序的效率问题(5张以上40W+数据的表),查询⼀次⼤概要20多秒,经过⼀番苦思冥想,处理⽅案如下:
1、软件设计初期,需要⼀对⼀关联的表应该设计在⼀张⼤表⾥,这样虽然字段多些,但是对于查询的速度提升是⾮常明显的,特别是在排序的情况下。
2、我们在关联的时候可能需要排序的表只是其中的⼀张或者两张,我们可以先针对这两张需要排序的表先查询排序,然后再⽤这两个表查询的结果关联其他表。代码如下:
1SELECT*FROM (
2SELECT*FROM M_RK_JBXX A
3LEFT JOIN M_RK_ZFGX B ON A.RKID = B.RKID
4LEFT JOIN(SELECT*
5FROM M_DZ_MP D
6LEFT JOIN M_DZ_LD E ON D.LDID = E.LDID
7ORDER BY E.XC, E.PXH, D.PXH)DD ON B.MPID = DD.MPID
8LEFT JOIN M_DZ_WGGL F ON DD.WGID = F.WGID
9LEFT JOIN M_RK_HJXXZH C ON C.MPID = DD.MPID
10 )
后来我在需要分页的环境下,⽤rownum来进⾏分页,发现按照上⾯的排序的顺序就被打乱了。在⽹上了很多资料也看了很多博客,也没到解决⽅案。
所以上⾯的代码的适⽤性就很局限了(不分页的情况下)。
但是我需要⾼效率的分页怎么办呢?rownum满⾜不了我呀。后来我⼜到了⼀个函数ROW_NUMBER() OVER(ORDER BY column) ,通过该函数可以极⼤的提⾼查询的效率。
使⽤的⽅式为
1SELECT*
2FROM (SELECT ROW_NUMBER() OVER(ORDER BY A.PXH, B.PXH) NUM,
3 A.*,B.*
4FROM TAB1 A
oracle数据库怎么查询表5LEFT JOIN TAB2 B
6ON A.T2= B.ID
7 )
8WHERE NUM BETWEEN1AND20
通过这种⽅式我的查询速度提⾼了将近10倍,当然我的实际环境⽐这段代码要⿇烦很多。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论