--数据库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 两个值。=======
有什么好的办法吗?
解决方案 »
- mysql-front为什么连接不上linux下的mysql数据库?
- 求一条sql语句……急用!
- 如何获取一项数据中所有不为空的列名?
- 请问mysql如何在两个数据库之间导入数据表
- MYSQL的问题,求一SQL语句
- 怎样在JDBC中忽略Duplicate column错误?
- 高分求助:怎么解决warning Supplied argument is not a valid MySQL result resource
- 50分求救。解决一个小问题。怎么生成。**.sql文件
- 如何存储地图坐标?
- mysql update 语句无效
- mysql 做分片后,是怎么处理分布式事务的?
- mysql source命令
最好logtime用日期型
SELECT uid, count(*) as count, name, GROUP_CONCAT(id)
FROM TABLE_A WHERE (isFirst=0 and sended=0) and logtime between '2013-04-01' and '2013-04-30 23:59:59'
GROUP BY uid HAVING count(*) >= 15
limit 0,10000;