数据库表 百万--千万条记录级别
CREATE TABLE `ch1` (
`id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`no` int(10) unsigned DEFAULT NULL,
`dtime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
要求功能: 按月统计总量,
使用的查询语句 select sum(no) as number,dtime as date from ch2 group by month(dtime)
请教的问题: 效率太低,大约需要20s到50s,希望能够提高效率,有什么办法,最好能够具体点。我建立过一个索引 在 no和 dtime列上的组合索引,但是用了几百秒。
请教解决方案。
例如使用等价的sql语句,存储过程之类的,
CREATE TABLE `ch1` (
`id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`no` int(10) unsigned DEFAULT NULL,
`dtime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
要求功能: 按月统计总量,
使用的查询语句 select sum(no) as number,dtime as date from ch2 group by month(dtime)
请教的问题: 效率太低,大约需要20s到50s,希望能够提高效率,有什么办法,最好能够具体点。我建立过一个索引 在 no和 dtime列上的组合索引,但是用了几百秒。
请教解决方案。
例如使用等价的sql语句,存储过程之类的,
解决方案 »
- 为什么下载的.NET文件中的数据库用SQL打不开?
- MySQL日期型字段直接用VARCHAR(10)表示好不好?用来日期比较效率会不会高一点?
- 关于MySQL记录统计
- 复制从机器如何处理复制表的数据更新
- 请问同表内,不同记录间不同字段的比较问题,谢谢!
- 怎么样在其他电脑连接到我机上的mysql
- 求助如何访问内网的MySQL Server?
- 员工上下级表关系查询问题
- auto_increment 如果到头会怎么样
- MySQL主从同步出现 Slave_IO_Running: No(一台计算机,两个mysql服务都在本地),求大佬指点!小弟给您跪了!
- MYSQL如何添加多个外键?
- 新手求值,如何实现以下简单的查找功能?
2千万级数据擦操作时会慢点,但不会慢这么离谱。建立多列索引,用explain看你的索引起效了没?
这条语句用不上索引,因为索引在group by 有聚合函数(sum(no))的时候不起作用。
索引在这里不好用,建议统计改为触发器,然后按要求触发单独存放在一张统计表,以后直接查统计表
CREATE TABLE `viewsource` (
`id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, //主键
`src_ip` int(11) NOT NULL,//源Ip
`dest_ip` int(11) NOT NULL,//目的IP
`time` datetime NOT NULL,// 时间
`value` int(11) NOT NULL,//流量值
PRIMARY KEY (`id`)
)
要求查询的东西:
按时间(可能 年 月 日 小时)统计流量
(以月为例):select sum(value),dtime from viewsource group by month(dtime)
按源IP统计总流量:Select sum(value),src_ip from viewsource group by src_ip
按目的Ip统计总流量 Select sum(value),dest_ip from viewsource group by dest_ip
按源IP统计某段时间内的流量 Select sum(value),src_ip from viewsource
where 起始时间<dtime <终止时间
group by src_ip 按目的Ip统计某段时间的流量 Select sum(value),dest_ip from viewsource
where 起始时间<dtime <终止时间
group by dest_ip
从原Ip到目的ip某段时间的流量:select sum(value),src_ip ,dest_ip from viewsource
where 起始时间<dtime <终止时间
group by src_ip,dest-ip
指定源ip 目的ip 时间段 查询:select sum(value)),src_ip ,dest_ip from viewsource
where 起始时间<dtime <终止时间
and src_ip= 源Ip and dest_ip = 目的ip
另外还可能要实现 排名功能:按ip 按时间段 排名,取出前5名进行显示在前台页面
,表的结构应该怎么优化,例如索引的使用,之类的,语句本身的优化。
http://topic.csdn.net/u/20090701/11/2599adb6-32ef-4688-9235-5015461a4a65.html?60678