私はこのようなテーブルを持っています。mySQLクエリの速度を向上させる
CREATE TABLE `accounthistory` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime DEFAULT NULL,
`change_ammount` float DEFAULT NULL,
`account_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
)
アカウントの毎日の請求の一覧です。私が使用しているアカウントの残高が必要な場合 SELECT sum(change_ammount)FROM accounthistory WHERE account_id =; account_id列にインデックスを追加したのでかなり速くなりました。
SELECT main.date as date from accounthistory as main
WHERE main.account_id=484368430
AND (SELECT sum(change_ammount) FROM accounthistory as sub
WHERE sub.account_id=484368430 AND
sub.date < main.date)<0
ORDER BY main.date DESC
LIMIT 1;
しかし、それは非常に遅い動作します:アカウントがマイナスに(日付をSUM(change_ammount)< 0時)に行ったとき が、私はこのクエリを使用し
は、しかし、今、私は時間を見つける必要があります。あなたはより良い解決策を提案できますか? (account_idだけでなく)インデックスが必要なのでしょうか?
ありがとうございました。私は非正規化を試みます。 – Taras