sql調優-oracle

UNE_XXX這個表訪問了兩次,是效能的主要障礙,需要想辦法,讓訪問次數變為1次。業務場景是,首先取fversion的最大值,以這個最大值為條件,再取原表的資料。

原語句:

SELECT

*

FROM

UNE_XXX

WHERE

frgnCode =

‘50101’

AND

fagenIdCode =

‘497a4557acc4b1a8a5cbd984f19aaab’

AND

fversion

in

SELECT

MAX

(fversion)

FROM

UNE_XXX

WHERE

frgnCode =

‘50101’

AND

fagenIdCode =

‘497a4557acc4b1a8a5cbd984f19aaab’

);

分析:訪問了兩次原表,產生15個一致讀

sql調優-oracle

sql調優-oracle

最佳化後:

這種寫法想要效能好,有個前提,就是經過

t。fagenIdCode,t。frgnCode過濾後,資料量要變的比較小才好,因為

max

(fversion)

over

需要涉及到排序,大量資料的排序,效能不會好的,這種寫法只訪問一次UNE_XXX,效率可以提高一倍左右。

select

*

from

select

t。*,

max

(fversion)

over

partition

by

frgnCode,fagenIdCode)

as

fversion_max

from

UNE_XXX t

WHERE

t。frgnCode =

‘50101’

AND

t。fagenIdCode =

‘497a4557acc4b1a8a5cbd984f19aaab’

where

fversion_max=fversion;

分析:訪問了一次原表,產生7個一致讀,減少了一般一致讀

sql調優-oracle

sql調優-oracle