我正在使用具有大型数据库的应用程序,而我的某些查询速度缓慢。
所以,如果需要,我需要给我一些更改模式的建议。
我有一个有关交易和发票的应用程序,每个发票有100-250多个交易。
因此,我有一个查询以获取所有发票并汇总交易金额。
此查询需要10多个秒才能运行。
您能给我一些建议以改善此查询吗。
此查询将获得1万张发票,每张发票有100-250笔交易
SELECT id, amount, (
select sum(amount)
from transactions
where invoice_id = invoices.id
) as paid from invoices
谢谢
答案 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);