我正在使用 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 语句提供一周时,查询将在 3-4 秒内运行。当我想要一个月的条目时,查询会在 300 - 400 秒内完成(如果有的话)。
我们正在使用的数据库非常大。它有大约 350 万笔交易。
起初我认为交易的绝对数量会导致这样的问题,但似乎并非如此。每周有 110363 个条目,每月有 576910 个条目。我的另一个想法(这似乎很可能)是,由于加入,即使加入不是基于进入日期,时间也会成倍增长。
我的问题是:连接是指数增长的“错误”吗?目前连接是不可避免的,但这可以通过一些数据库重构来解决。
感谢您的意见。
解释的结果:
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"