0

私は MySql を使用しており、特定のクエリがトランザクションのテーブルから収益を計算する状況があります。選択したトランザクションは、1 日、1 週間、または 1 か月にまたがることができます。

SELECT 
revenue formula 
FROM
    product inner join
    account on key_condition1 inner join
    transaction on key_condition2
WHERE
    tx.ENTRYDATE >= '2013-06-17 00:00:00' AND tx.ENTRYDATE < '2013-07-24 00:00:00'
GROUP BY product

where ステートメントに 1 週​​間を指定すると、クエリは 3 ~ 4 秒で実行されます。1 か月のエントリが必要な場合、クエリは 300 ~ 400 秒で完了します。

私たちが扱っているデータベースはかなり大きいです。約350万件の取引があります。

最初は、トランザクションの数が多いことがそのような問題につながると思っていましたが、そうではないようです。1 週間あたり 110363 のエントリがあり、1 か月あたり 576910 のエントリがあります。私のもう 1 つの考え (それは非常に可能性が高いと思われます) は、結合がエントリの日付に基づいていなくても、結合のために時間が指数関数的に増加する可能性があるということです。

私の質問は次のとおりです。結合は指数関数的な成長の「障害」ですか? 現時点では結合は避けられませんが、これはデータベースのリファクタリングで修正される可能性があります。

ご意見ありがとうございます。

EXPLAIN の結果:

id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,LOANPRODUCT,index,PRIMARY,PRIMARY,98,NULL,1,
1,SIMPLE,LOANACCOUNT,ref,"PRIMARY,LOANACCOUNT_PRODUCTTYPEKEY",LOANACCOUNT_PRODUCTTYPEKEY,99,LOANPRODUCT.ENCODEDKEY,16559,"Using where; Using index"
1,SIMPLE,LOANTRANSACTION,ref,"LOANTRANSACTION_PARENTACCOUNTKEY,LOANTRANSACTION_REVERSALTRANSACTIONKEY,LOANTRANSACTION_ENTRYDATE",LOANTRANSACTION_PARENTACCOUNTKEY,99,LOANACCOUNT.ENCODEDKEY,7,"Using where"
4

1 に答える 1