为我的案例构建模式数据库的最佳实践

时间:2018-09-16 06:28:16

标签: mysql sql

我正在使用具有大型数据库的应用程序,而我的某些查询速度缓慢。

所以,如果需要,我需要给我一些更改模式的建议。

我有一个有关交易和发票的应用程序,每个发票有100-250多个交易。

因此,我有一个查询以获取所有发票并汇总交易金额。

此查询需要10多个秒才能运行。

您能给我一些建议以改善此查询吗。

此查询将获得1万张发票,每张发票有100-250笔交易

SELECT id, amount, (
  select sum(amount)
  from transactions
  where invoice_id = invoices.id
) as paid from invoices

谢谢

2 个答案:

答案 0 :(得分:2)

使用联接,如果与事务表没有外键关系,则与发票表创建该关系

SELECT id,sum(amount)
 from invoices i join transactions t on t.invoice_id = i.id
group by id

答案 1 :(得分:0)

您的查询在逻辑上很好。我将其写为:

select i.id, i.amount,
       (select sum(t.amount)
        from transactions t
        where t.invoice_id = i.id
       ) as paid
from invoices i;

为了提高性能,您希望在transactions(invoice_id, amount)上建立索引:

create index idx_transaction_invoice_amount on transactions(invoice_id, amount);