我有一张这样的桌子。
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 列上添加了一个索引。
但是现在我需要找到帐户减去的时间(SUM(change_ammount)<0时的日期)我使用这个查询:
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;
但它的工作非常缓慢。你能提出更好的解决方案吗?也许我需要一些索引(不仅在 account_id 上)?