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 onTableBNew.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

第二种方法

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

from

(

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

from

(

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

from TableA

left join TableC

onTableC.A1 = TableA.A1

group by TableA.A1

) TableANew

left join TableD

onTableD.A1 = TableANew.A1

group by TableANew.A1

)TableANew2

left join TableAB

on TableAB.A1 = TableANew2.A1

left join TableB

on TableB.B1 = TableAB.B1

第一种方式通过子查询,索引很难发挥作用

第二种方式表逐层嵌入查询,通过对比测试,如果配合索引的话,比第一种方式快一个数量级以上。

优质内容筛选与推荐>>
1、mysql忘掉密码
2、android 进阶参考
3、Scala入门基础3
4、Hadoop的目录结构
5、期末总结


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号