日期:2014-05-18  浏览次数:20680 次

关于多表联合查询的计算反应特别慢的问题
[code=SQL]
---订单数量统计列表,按订单   ,按客户
select   *******   from   订单
INNER   JOIN   生产单     订单.OrderID   =   生产单.OrderID    
********
GROUP   BY   *****

[/code]

多表关联查询统计,由于   订单     的OrderID在多数情况下是和   生产单   的OrderID相等,但也有这样一种情况
订单的   OrderID= '200101 '     生产单的   OrderID= 'BAK200101 '     (订单代码前加bak)的为补做的生产单,

当我需要统计产品的数量合计是。订单.OrderID   =   生产单.OrderID       中间的等于换成like的时候,查询非常慢,大概要几分钟,用=的时候就很快!!但是用=计算的结果有实际是不对的,没有计算到 'BAK200101 '这种情况的生产单。


求解,有没有更快速的一点办法?

------解决方案--------------------
这个问题的关键在于"生产表"中的OrderID不规矩;
建议在生产表中增加一个字段"OrderType" or "isbak" 来标记"BAK200101"类型的数据,而将此类OrderID还原为"200101"的形态
------解决方案--------------------
如果经常需要根据订单.OrderID = 生产单.OrderID来进行计算,那么可以考虑下在生产单数据表中增加一列,保存订单.OrderID的原始记录,然后计算的时候使用订单.OrderID=生产单.订单OrderID,虽然会有数据冗余的问题存在,但为了计算的效率,我觉得是可以容忍的。
另外可以考虑下实际业务需求,是否有必要两张表的OrderID不一致。

------解决方案--------------------
探讨

orderNo orderID orderType
1 200101 10
2 BAK200101 10

另一个表记录入库数

每个订单各入库数量记为100

------解决方案--------------------
SQL code
'BAK' + 订单.OrderID   =   生产单.OrderID