--数据库mysql 5.X
--创建表的语句
CREATE TABLE TABLE_A (
`id` int(11) NOT NULL AUTO_INCREMENT,
`logtime` datetime DEFAULT NULL ,
`isFirst` int(11) NOT NULL DEFAULT '0' COMMENT '只有0/1',
`name` varchar(15) DEFAULT NULL,
`uid` varchar(100) DEFAULT NULL,
`sended` int(11) NOT NULL DEFAULT '0' COMMENT '只有0/1',
PRIMARY KEY (`id`),
KEY `logtime` (`logtime`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
--数据 太多了。模拟给一条吧。
INSERT INTO `table_a` VALUES (1,'2013-04-27 01:02:03',0,'jack','13243423',0);
-- 查询语句
SELECT uid, count(*) as count, name, GROUP_CONCAT(id) FROM TABLE_A
WHERE (isFirst=0 and sended=0) and LEFT(logtime, 7)='2013-04'
GROUP BY uid HAVING count >= 15
limit 0,10000;
这个表的数据量大约600--800W
如果不分页的话,基本上每次查询出来的结果在10-20W行左右,
由于是分组,每个分组的数量大概在5-60条记录吧,所以关联的记录大概在100W左右。
数据需要查询出来再处理,几十万一次加载到内存太多了,所以分页。
但是效率特别低,其中有一个GROUP_CONCAT(id) 这个也比较影响性能。
但是我需要知道每次分组后的ID,以便更新值。
其中isFirst 和 sended 只有0和1 两个值。
=======
有什么好的办法吗?