MySQL的组加入
SELECT
tba.UpdatedDate AS UpdatedDate,
tsh.SupplierID,
ts.ProductCode as ProductCode,
sum(tba.AfterDiscount) as AfterDiscount,
sum(tba.Quantity) as Quantity
FROM
tblstockhistory as tsh
left join tblstock as ts
on tsh.StockID=ts.StockID
left join tblbasket as tba
on ts.ProductCode=tba.ProductCode
and tsh.SupplierID=49
AND tba.Status=3
group by
tba.UpdatedDate
ORDER BY
Quantity DESC
我有供应商表,供应商ID标记在给tblstockhistory表,并且在这种tblstockhistory表包含StockID(从tblstock表引用),我有库存表包含StockID ,产品代码, 和我有tblbasket表,在此我保持了产品代码,MySQL的组加入
我的想法在这里, 我想说明的供应商ID,当我通过供应商ID,它展示秀THW统计,这个供应商提供商品销售统计,
但上面的查询有时会返回空值,它需要太多的时间excution,约50秒,
我是什么样的财产以后下面从上面查询
Date SupplierID, Amount, Quantity
2010-12-12 12 12200 20
2010-12-12 40 10252 30
2010-12-12 10 12551 50
2010-12-13 22 1900 20
2010-12-13 40 18652 30
2010-12-13 85 19681 50
2010-12-15 22 1900 20
2010-12-15 40 18652 30
2010-12-15 85 19681 50
难道一个tblstockhistory没有stockID永远存在。如果没有,你可以将它转换为可以提供帮助的内部连接。
例如
tblstockhistory as tsh
INNER join tblstock as ts
on tsh.StockID=ts.StockID
你也可以考虑添加索引,如果他们目前不存在。
至少我会将以下字段编入索引,因为它们可能会被共同加入和查询。
- tblstockhistory.SockID
- tblstockhistory.SupplierID
- tblstock.StockID
- tblstock.ProductCode
- tblbasket.ProductCode
- tblBacket.Status
- tblbasket.UpdatedDate
最后,如果这个查询真的很重要,那么您可以创建汇总表并定期更新它们。
对于哪些字段,我应该在这里创建索引 – Bharanikumar 2010-12-13 17:24:47
StockID,是必需的,因为stockoz只有我们拉ProductCode,ProductCode存储在tblbasket表中, – Bharanikumar 2010-12-13 17:25:58
添加了我最少索引的字段。此外,由于StockID是必需的,我一定会将其更改为Inner Join。您可能还希望从Select中删除ProductCode,因为它看起来不在您的示例输出中。 – 2010-12-13 17:37:17
重新写group by子句的,然后再试一次
group by
tba.UpdatedDate, tsh.SupplierID
您在查询中提到的产品代码,但没有在“结果”你想,如果你想显示的产品代码以及然后将其添加到
按分组分组,或者将其从select子句中删除。
但这是[MySQL](http://stackoverflow.com/questions/1066453/mysql-group逐和阶由/ 1066504#1066504) – 2010-12-13 17:57:59
为了提高性能,请确保您在连接中使用的所有字段都已编入索引。 – Nazariy 2010-12-13 17:23:37