我有三张桌子
glSalesJournal公司
赫米萨德
HMISMain公司
现在我要做的是添加glsalejournal amt和HMISAdd amt,同时使用不同的字段分组并将结果插入glsalejournal
glSalesJournal包含633173条记录
HMISAdd包含4193条记录
HMISAdd和glSalesJournal包含相同的列
位置
格拉卡特
glSubAcct公司
批次编号
合同编号
金额
我向表中添加了索引,结果仍然相同。
这是我的代码:

INSERT INTO hmismain
            (loc,
             glacct,
             subacct,
             batchnbr,
             contractnbr,
             amt)
SELECT glsalesjournal.loc,
       glsalesjournal.glacct,
       glsalesjournal.glsubacct,
       ( glsalesjournal.amt + hmisadd.amt ) AS sumAmt,
       glsalesjournal.batchnbr,
       glsalesjournal.salescontnbr
FROM   glsalesjournal
       LEFT OUTER JOIN hmisadd
                    ON ( glsalesjournal.loc = hmisadd.loc
                         AND glsalesjournal.glacct = hmisadd.glacct
                         AND glsalesjournal.glsubacct = hmisadd.subacct
                         AND glsalesjournal.batchnbr = hmisadd.batchnbr
                         AND glsalesjournal.salescontnbr = hmisadd.contractnbr )
GROUP  BY glsalesjournal.loc,
          hmisadd.loc,
          glsalesjournal.glacct,
          hmisadd.glacct,
          glsalesjournal.glsubacct,
          hmisadd.subacct,
          glsalesjournal.batchnbr,
          hmisadd.batchnbr,
          glsalesjournal.salescontnbr,
          hmisadd.contractnbr

脚本执行所需的时间超过2小时。即使我把记录限制在100,所用的时间也是一样的。
有人能指导我如何优化脚本吗。
谢谢

最佳答案

1)这看起来像是一次性的查询,我说的对吗?如果不是每次都将相同的数据插入hmismain表。
2)您正在从两个单独的表中对字段进行分组,因此没有任何索引对您有帮助。唯一有帮助的索引是以相同方式链接这两个表的视图上的索引。
进一步说明:
有什么意义

      GROUP  BY glsalesjournal.loc,
      hmisadd.loc,
      glsalesjournal.glacct,
      hmisadd.glacct,
      glsalesjournal.glsubacct,
      hmisadd.subacct,
      glsalesjournal.batchnbr,
      hmisadd.batchnbr,
      glsalesjournal.salescontnbr,
      hmisadd.contractnbr

将数据按相同字段分组两次
glsalesjournal.loc, hmisadd.loc
glsalesjournal.glacct, hmisadd.glacct,
...
从GROUP BY中删除重复项,它应该运行得很快

关于mysql - 为什么此查询需要这么长时间才能执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12051342/

10-13 03:19