私は約80,000の請求書を持つデータベースを持っています。それぞれのテーブルには価格とVATと割引と請求書IDを持つ請求書項目があります。私はまた、支払われた価格と請求書IDの領収書テーブルを持っています。未払いの請求書検索のためにMySQLのクエリが遅すぎる
どの請求書が合計で支払われていないかを調べる必要があります。 私がこれまで持っていることはこれです:
SELECT SUM((i.price-(i.price*(i.discount/100)) + (i.price-(i.price*(i.discount/100))*(tax/100)))*i.quantity) invoiced
, invoice_id invoiceitems
, (SELECT SUM(payed_value)
FROM receipts
WHERE invoice_id = invoiceitems
AND payed_value IS NOT NULL
) paid
FROM invoices_items i
WHERE invoice_id IN (SELECT id
FROM invoices x
WHERE x.invoicing_date < 1493503200
)
GROUP
BY i.invoice_id
HAVING paid < invoiced;
問題は、このクエリを実行するために3分かかります。
私が必要とするのは、すべての価格が請求され、価格が支払われ、請求書ごとに1行のテーブルが必要です。私はそれを3分よりもずっと速く走らせる必要がある。
編集:だから私はグループによって部分的に削除すると突然わずか0.17秒かかりますが、私には1行しか与えません。同じ結果を得るために私が代わりにできることは何ですか?
の主要なリファクタリングは、あなたの質問を編集して、同じデータおよび望ましい結果を提供してください。 –
@ GordonLinoff他に何が必要ですか?私はあなたが求めていることは質問にあると思っています –
参照:[私は非常に単純なSQLクエリであると思われるMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952 /なぜ、私は提供するためのmcveのために私にとっては非常に単純なSQLクエリのように) – Strawberry