子查询的性能优化

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

常规的查法:


SELECT p.`name` product,b.`name` branch,
CONCAT(e.fname,'',e.lname) name,
SUM(a.avail_balance) 
FROM account a INNER JOIN employee e
on a.account_id=e.emp_id
INNER JOIN branch b
on a.open_branch_id=b.branch_id
INNER JOIN product p
on a.product_cd=p.product_cd
WHERE p.product_type_cd='ACCOUNT'
GROUP BY p.`name`,b.`name`,e.fname,e.lname
ORDER BY 1,2

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

--改进后的语句如下
SELECT
    p.`name`,
    b.`name`,
    CONCAT(e.fname, ' ', e.lname),
    account_groups.tot_deposits
FROM
    (
        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_groups
INNER JOIN employee e ON e.emp_id = account_groups.emp_id
INNER JOIN branch b ON b.branch_id = account_groups.open_branch_id
INNER JOIN product p ON p.product_cd = account_groups.product_cd
WHERE
    p.product_type_cd = 'ACCOUNT'

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤时间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值