欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sql提高多个sum 查询的速度

程序员文章站 2022-04-16 13:25:02
...

三张表
t_finance_collapse 表一 集合表 相当于主表
t_finance_task 表二 资金表 相当于从表
t_finance_task_collapse 表三 关联表

业务需求: 一个集合表,里面绑定了多个资金表,资金表有好多金额,查询的集合列表将集合绑定的多个资金表里面的金额计算的和显示到列表上。用sum方式计算,一旦数据很多就会很慢。

表一结构:id,createTime
表二的结构:id,applicant_amount,adjustment_amount,pay_amount,receive_amount
表三:id,collapse_id 集合id,task_id 资金id

SELECT
        distinct(tfc.id) as collapseId,
        tfc.create_time as createTime,
        (SELECT SUM(tf.applicant_amount)
        FROM t_finance_task_collapse ttc
        left join t_finance_task tf on ttc.task_id=tf.id
        where
        ttc.collapse_id = tfc.id ) as applicantAmount,

        (SELECT SUM(tf.adjustment_amount)
        FROM t_finance_task_collapse ttc
        left join t_finance_task tf on ttc.task_id=tf.id
        where
        ttc.collapse_id = tfc.id ) as adjustmentAmount,

        (SELECT SUM(tf.pay_amount)
        FROM t_finance_task_collapse ttc
        left join t_finance_task tf on ttc.task_id=tf.id
        where
        ttc.collapse_id = tfc.id ) as payAmount,

        (SELECT SUM(tf.receive_amount)
        FROM t_finance_task_collapse ttc
        left join t_finance_task tf on ttc.task_id=tf.id
        where
        ttc.collapse_id = tfc.id ) as receiveAmount

        FROM
        t_finance_collapse
        as tfc
        left join t_finance_task_collapse ttcV on  ttcV.collapse_id=tfc.id
        left join t_finance_task ttk on  ttk.id=ttcV.task_id

改sql在sum方法上执行的速度很慢,所以需要提高sum方法的速度,
因为sum方法只是left join 这个表t_finance_task_collapse ,后面left join的字段有task_id,collapse_id ,自带的id不需要增加索引,所以增加t_finance_task_collapse 关联表的两个字段索引就可以,

sql提高多个sum 查询的速度
使用可视图直接添加,或者百度一下创建索引的sql语句添加。

如果sum不止一个表,那么left join几个表找到on的字段,继续添加索引。