MySql 的统计查询性能问题

由于数据量非常大(单表:四五百万条数据),需要对这种类型的表进行统计查询,并插入到对应的Maxstatistics(里面是Id、Value、Time)MinStatist... 由于数据量非常大(单表:四五百万条数据),需要对这种类型的表进行统计查询,并插入到对应的Maxstatistics(里面是Id、Value、Time) MinStatistics 等表。
这个表的结构如下:CREATE TABLE `datarecord` (
`Id` smallint(6) NOT NULL,
`Time` datetime NOT NULL,
`Value` int(11) DEFAULT NULL,
`Quality` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`,`Time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
解释:这个datarecord 表中有1250个Id,每个Id都有将近3600条记录。而现在的工作就是通过
sql语句实现:统计出来每个Id的Value最大值,并且插入到MaxStatistics 。关键在统计Value最大值会耗费非常多的时间,需要将近5分钟的时间。再加上最小值平均值等的统计,就非常缓慢,以至于是不能够接受的。以下是小弟目前的查询插入语句,希望各位能给出些建议。谢谢。。。
insert into Maxstatistics(`Id`,`Value`,`Time` ) SELECT a.`Id`,a.`Value`,a.Time
FROM idatarecord a,(SELECT Id ,max(`Value`) as valueb FROM datarecord GROUP BY Id) b where a.Id=b.Id and a.`Value`=b.valueb
关于MySql 性能补充:如果没有索引或者改变引擎的前提下,但是从400多万的数据表中查询count(*)或者是查询max(Value) 都是要3-4分钟。非常的慢。添加了索引(索引是datarecord中Id和Value的联合索引,也试过Value的索引)在查询count(*) 与max(value)就很快了。都是1-2s解决的。不过对于刚才的语句好像没有什么显著的变化(好像说道GROUP BY 和索引有冲突,但是我也不知道怎样才能做到查询每个Id最大值)。希望大家能给出合理的建议,如果语句需要改善也请给些建议或者观点,非常感谢!!!十分渴望!!!
想问问大家遇到这种问题是如何对待的。还是说MySql单表到了几百万的级别就速度非常慢了吗?谢谢大家。
insert into Maxstatistics(`Id`,`Value`,`Time` ) SELECT a.`Id`,a.`Value`,a.Time
FROM datarecord a,(SELECT Id ,max(`Value`) as valueb FROM datarecord GROUP BY Id) b where a.Id=b.Id and a.`Value`=b.valueb 这是那条我现在用的语句。之前提问编辑时,多写了个字母。
展开
 我来答
yongwin
2011-12-07
知道答主
回答量:55
采纳率:0%
帮助的人:21.8万
展开全部
不去用max,order by 排序一下,select 1 应该是可以的吧!
更多追问追答
追问
不太清楚,可否说的清楚点,谢谢
追答
把,(SELECT Id ,max(`Value`) as valueb FROM datarecord GROUP BY Id) b换成这个:
(SELECT top 1 Id ,Value as valueb FROM datarecord ,(selecet id from datarecord group by id)c where datarecord .id=c.id order by Value desc) b
好像是可以,你试一下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式