有个三个表 A ,B ,C
A 表 10万条记录
B 表 20万条记录
C 表 100万条记录A表 (产品表) PRIMARY(id)
id name
编号 名称
B表 (库存表) PRIMARY(year,month,bmh,id) 索引(id)
id year month bmh kcsl
编号 年 月 部门号 库存数量
C表 (销售记录表) PRIMARY(rq,bmh,id) 索引(id)
id rq bmh sell
编号 日期 部门号 销售数量
功能:更具A(产品表)列出 库存数量 和 销售数量的对比
如:查询条件
1.库存账为 2012年06月
2.销售时间为 2012-06-01 至 2012-06-30
3.部门号为 001查询结果例如:
id name kcsl sell
1001 苹果 10 3
1002 香蕉 0 1
1003 西瓜 0 0
1004 桃子 5 0
.
.
.
.本人测试了多种写法,查询速度都在几分钟以上,请教这个多表连接的查询语句该如何写,或有什么更好的建议!谢谢
A 表 10万条记录
B 表 20万条记录
C 表 100万条记录A表 (产品表) PRIMARY(id)
id name
编号 名称
B表 (库存表) PRIMARY(year,month,bmh,id) 索引(id)
id year month bmh kcsl
编号 年 月 部门号 库存数量
C表 (销售记录表) PRIMARY(rq,bmh,id) 索引(id)
id rq bmh sell
编号 日期 部门号 销售数量
功能:更具A(产品表)列出 库存数量 和 销售数量的对比
如:查询条件
1.库存账为 2012年06月
2.销售时间为 2012-06-01 至 2012-06-30
3.部门号为 001查询结果例如:
id name kcsl sell
1001 苹果 10 3
1002 香蕉 0 1
1003 西瓜 0 0
1004 桃子 5 0
.
.
.
.本人测试了多种写法,查询速度都在几分钟以上,请教这个多表连接的查询语句该如何写,或有什么更好的建议!谢谢
select d.id,d.kcsl ,e.sell from (select a.id , b.kcsl from a left outer join b on a.id = b.id and b.year='2012' and b.month='06' and b.bmh='001') d left outer join (select c.id, sum(c.sell) from c where c.rq between '2012-06-01' and '2012-06-30' and c.bmh='001' group by c.id) e on d.id= e.id
explain select d.id,d.kcsl ,e.sell
from (select a.id , b.kcsl from a left outer join b on a.id = b.id and b.year='2012' and b.month='06' and b.bmh='001') d
left outer join
(select c.id, sum(c.sell) from c where c.rq between '2012-06-01' and '2012-06-30' and c.bmh='001' group by c.id) e
on d.id= e.id
及 show index from ... 以供分析。