【发布时间】:2014-03-16 23:03:25
【问题描述】:
我有一个包含大约 2000 万行的大表,并且它每天都在增长,并且我有一个从该表中获取查询的表单。不幸的是,查询返回数十万行。 查询是基于时间的,我需要所有记录根据一些规则通过'clid'对它们进行分类。所以我需要对所有记录进行一些处理以制作结果表。 这是我的桌子:
CREATE TABLE IF NOT EXISTS `cdr` (
`gid` bigint(20) NOT NULL AUTO_INCREMENT,
`prefix` varchar(20) NOT NULL DEFAULT '',
`id` bigint(20) NOT NULL,
`start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL DEFAULT '',
`duration` int(11) NOT NULL DEFAULT '0',
`service` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`gid`),
UNIQUE KEY `id` (`id`,`prefix`),
KEY `start` (`start`),
KEY `clid` (`clid`),
KEY `service` (`service`)
) ENGINE=InnoDB DEFAULT CHARSET=utf-8 ;
这是我的查询:
SELECT * FROM `cdr`
WHERE
service = 'test' AND
`start` >= '2014-02-09 00:00:00' AND
`start` < '2014-02-10 00:00:00' AND
`duration` >= 10
日期周期可能从 1 小时到 60 天甚至更长。(如:
“2013-02-02 00:00:00”和“2014-02-03 00:00:00”之间的日期(开始)
)
结果集每天大约有 150,000 行。当我尝试获得更长时期甚至一天的结果时,数据库崩溃。 有人知道吗?
【问题讨论】:
-
您是否尝试过使用 MySQL 的
LIMIT和OFFSET批量获取结果,例如 10,000 行?获得所有结果需要更长的时间,但有助于解决超时错误。 -
是的,但这需要很长时间,因为它应该是实时报告,所以我的老板不能接受这么长时间。