比如有两个表,第一个m表:
mID,name,pid
1,  xxx   ,   0
2,  xxx, 1
3,  xxx, 2
4,  xxx, 3
第二个i表:
id,  mId,money
1,  1,      100,
2,   2,      500
3,   1,      1000
4,  4,       600现在假设两个表都是上百万的数据;
需要查询:指定一个mId,查询跟mid有关联的所有的m表的数据,根据pid;  比如给定一个mid=1,那么就要查询出mId=1,2,3,4的数据;    同时,需要查询出mid对应的money的sum;比如:查询mID=1的,那么就会出现如下的数据:
mID       moneySum
1              1100
2               500
3              0
4              600
自己写了一个,但是查询比较慢。 所以想问问各位,有没有类似的列子,或提供个思路;有sql更好了。谢谢了。

解决方案 »

  1.   

    第二个表的mid上加索引
      

  2.   

    自己写存储过程实现。在 MID上添加索引。
      

  3.   

    BEGIN 
            DECLARE sTemp VARCHAR(1000); 
            DECLARE sTempChd VARCHAR(1000); 
    -- 关联的所有金额
    DECLARE orderSumMoney VARCHAR(100);
            SET sTemp = memberIdStart; 
            SET sTempChd =cast(memberIdStart as CHAR); 
            WHILE sTempChd is not null DO 
              SET sTemp = concat(sTemp,',',sTempChd); 
              SELECT group_concat(memberId) INTO sTempChd FROM member where FIND_IN_SET(recommendedPerson,sTempChd)>0; 
            END WHILE; 
    -- 查询所有关联的人所消费的金额
    select SUM(orderMoney) into orderSumMoney from orderinfo where memberId in(sTemp);
            RETURN orderSumMoney; 
          END
    加了索引也是慢。这种递归的查询,估计也快不起来了。
      

  4.   

      比如给定一个mid=1,那么就要查询出mId=1,2,3,4的数据;     这句话是啥意思  ?  根pid 有关系吗??题主,把表都写清楚,我半天没明白你到底要什么样的结果!!!