Mysql sql优化问题 sql执行顺序问题???

pengcheng_1024 发布于 2013/03/06 15:55
阅读 1K+
收藏 0

下面是我的sql,这条语句执行需要4分钟左右,其中关联的表中数据加起来也就9万条,感觉这个sql还有待与优化,希望懂mysql语法的高人给指点一下,感谢啦!同时感觉left join 这个在sql中应该是有先后顺序,但是具体不清楚,希望有知道的给点指导,谢谢

SELECT bdp.`NO` AS '分部编号',bdp.`NAME` AS '分部名称', item.ITEM_NO AS  '物料编号',
item.ITEM_NAME AS '物料名称' ,bdu.`NAME`  AS '单位',
SUM(item.ITEM_AMOUNT/bdpr.MAIN2BASIC)  AS '消耗量',
ivts.PRICE  AS '单位成本' ,SUM(item.ITEM_AMOUNT/bdpr.MAIN2BASIC) *ivts.PRICE AS '小计'
FROM `prod_material_obtain` AS obtain
LEFT JOIN  prod_material_obtain_item AS item ON obtain.ID = item.HEADER_ID
LEFT JOIN  bd_product AS bdpr ON bdpr.`NO` = item.ITEM_NO
LEFT JOIN  bd_branch AS bdp  ON obtain.BRANCH_ID = bdp.ID
LEFT JOIN  bd_unit AS bdu ON bdu.ID = item.UNIT
LEFT JOIN  ivt_item_storage  AS ivts ON ivts.WAREHOUSE_ID = item.OUT_WAREHOUSE_ID AND item.ITEM_NO=ivts.ITEM_NO
where   obtain.CREATE_TIME >'2013-02-27-9' and  obtain.REMARK is not NULL
GROUP BY bdp.`NO`, item.ITEM_NO ;








加载中
0
懵懂一时
懵懂一时
建表语句和执行计划嗫?
pengcheng_1024
pengcheng_1024
什么意思啊??
0
颖哥很低调
颖哥很低调
left join 这么些表,可能中间还有比较大的表,肯定慢了,left join 算笛卡尔积的     执行顺序的话  肯定是以最左边的表为准了。 不考虑其他的条件,只以left join 方向优化的话, 让所有left join时笛卡尔积尽可能最少  也就是  所有的笛卡尔积的和最小便是最优方案。  不过还是不支持用这么多的left join。。。建议分批查询  然后放到内存中算出最终结果。
pengcheng_1024
pengcheng_1024
这样啊,感觉可以
返回顶部
顶部