有2个表,表一INVENTORY为商品详细信息表,CODE为商品代码,可做为主键:
ID CODE NAME PRICE
------------------------
1 V01 TOMATO 20.00
2 F01 APPLE 10.00 表二SALE为销售详细信息表。
ID CODE NAME PRICE DATE QTY
----------------------------------------
1 V01 TOMATO 20.00 20080201 5
2 F01 APPLE 10.00 20080203 6
3 F01 APPLE 10.00 20080204 10
4 V01 TOMATO 20.00 20080204 10 现要求查询所有商品的详细信息及其累计销售总数量,即得出以下结果集:
CODE NAME PRICE SOLD
--------------------------
V01 TOMATO 20.00 15
F01 APPPLE 10.00 16我先将SALE表按照CODE分组累加出每种商品的总销售量,并将结果保存在一个临时表SALE_SOLD中:
CREATE TEMPORARY TABLE SALE_SOLD(SELECT CODE ,SUM(QTY) AS SOLD FROM SALE GROUP BY CODE);然后用INVENTORY表按照CODE来left join临时表SALE_SOLD,得出结果即为商品详细信息及销售总量:
SELECT A.CODE,A.NAME,A.PRICE,B.SOLD FROM INVENTORY AS A LEFT JOIN SALE_SOLD AS B ON A.CODE = B.CODE;我这样做的话当两个表中记录不多的时候没有问题,但是一旦表中记录达到上万条,查询速度就会变得非常慢,甚至造成内存错误,请问我应该如何进行优化?
ID CODE NAME PRICE
------------------------
1 V01 TOMATO 20.00
2 F01 APPLE 10.00 表二SALE为销售详细信息表。
ID CODE NAME PRICE DATE QTY
----------------------------------------
1 V01 TOMATO 20.00 20080201 5
2 F01 APPLE 10.00 20080203 6
3 F01 APPLE 10.00 20080204 10
4 V01 TOMATO 20.00 20080204 10 现要求查询所有商品的详细信息及其累计销售总数量,即得出以下结果集:
CODE NAME PRICE SOLD
--------------------------
V01 TOMATO 20.00 15
F01 APPPLE 10.00 16我先将SALE表按照CODE分组累加出每种商品的总销售量,并将结果保存在一个临时表SALE_SOLD中:
CREATE TEMPORARY TABLE SALE_SOLD(SELECT CODE ,SUM(QTY) AS SOLD FROM SALE GROUP BY CODE);然后用INVENTORY表按照CODE来left join临时表SALE_SOLD,得出结果即为商品详细信息及销售总量:
SELECT A.CODE,A.NAME,A.PRICE,B.SOLD FROM INVENTORY AS A LEFT JOIN SALE_SOLD AS B ON A.CODE = B.CODE;我这样做的话当两个表中记录不多的时候没有问题,但是一旦表中记录达到上万条,查询速度就会变得非常慢,甚至造成内存错误,请问我应该如何进行优化?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货