sql多表查詢優化


TableA(A1,A2)

TableB(B1,B2)

TableAB(id,A1,B1)

TableA和TableB是多對多關系,通過中間表TableAB連接

TableC(C1,A1,AmountC)

TableD(D1,A1,AmountD)

TableC和TableD通過A1字段和TableA連接,是多對一關系

 

第一種方法

select A1,A2

from TableA

left join 

(

select B1,B2,A1

from TableB

left join TableAB

on TableAB.B1 = TableB.B1

) TableBNew on TableBNew.A1 = TableA.A1

left join

(

select C1,sum(AmountC),A1

from TableC

group by A1

) TableCNew on TableCNew.A1 = TableA.A1

left join

(

select D1,sum(AmountD),A1

from TableD

group by A1

) TableDNew on TableDNew.A1 = TableA.A1

 

第二種方法

select TableANew2.A1,TableANew2.A2,TableANew2.AmountC,TableANew2.AmountD,TableB.B1,TableB.B2

from

(

select TableANew.A1,TableANew.A2,TableANew.AmountC,sum(TableD.AmountD)

from

(

select A1,A2,sum(TableC.AmountC) AmountC

from TableA

left join TableC

on TableC.A1 = TableA.A1

group by TableA.A1

) TableANew

left join TableD

on TableD.A1 = TableANew.A1

group by TableANew.A1

)TableANew2

left join TableAB

on TableAB.A1 = TableANew2.A1

left join TableB

on TableB.B1 = TableAB.B1

 

第一種方式通過子查詢,索引很難發揮作用

第二種方式表逐層嵌入查詢,通過對比測試,如果配合索引的話,比第一種方式快一個數量級以上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM