子查询的性能优化

来源:互联网 发布:程序员数学 四部曲 pdf 编辑:程序博客网 时间:2024/05/19 18:48

如下的表结构:
要查询的结果中包含账户类型、开户雇员、开户行、及所有存储账户的余额求和。
这里写图片描述
这里写图片描述

常规的查法:

SELECT p.`name` product,b.`name` branch,CONCAT(e.fname,'',e.lname) name,SUM(a.avail_balance) FROM account a INNER JOIN employee eon a.account_id=e.emp_idINNER JOIN branch bon a.open_branch_id=b.branch_idINNER JOIN product pon a.product_cd=p.product_cdWHERE p.product_type_cd='ACCOUNT'GROUP BY p.`name`,b.`name`,e.fname,e.lnameORDER BY 1,2

这里写图片描述
劣势分析,这里的分组是基于字符串的分组,而account表里面分别有对应的外键,可以按照外键进行分组,如:

--改进后的语句如下SELECT    p.`name`,    b.`name`,    CONCAT(e.fname, ' ', e.lname),    account_groups.tot_depositsFROM    (        SELECT            product_cd,            open_branch_id,            open_emp_id emp_id,            SUM(avail_balance) tot_deposits        FROM            account        GROUP BY            product_cd,            open_branch_id,            open_emp_id    ) account_groupsINNER JOIN employee e ON e.emp_id = account_groups.emp_idINNER JOIN branch b ON b.branch_id = account_groups.open_branch_idINNER JOIN product p ON p.product_cd = account_groups.product_cdWHERE    p.product_type_cd = 'ACCOUNT'

这里写图片描述

0 0
原创粉丝点击