博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql多表查询优化
阅读量:5261 次
发布时间:2019-06-14

本文共 1114 字,大约阅读时间需要 3 分钟。

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

 

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

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

 

转载于:https://www.cnblogs.com/shymen/p/8666356.html

你可能感兴趣的文章
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
latex tree
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
css3学习01
查看>>