平均每五分钟采集一次数据,存储到 mysql 中,数据基本上是电流、电压、温度、功率……
然后将会有很多客户端浏览这些数据,随机查询某几个设备在某一天中的数据,查询语句基本上是
select DeviceId, DeviceDateTime, 电压值, 电流值, 温度值 …… from tbDeviceData Where DeviceId In (1422, 5532, 6521, 5176, 9394) And DeviceDateTime Between Date1 and Date2
其中 Date1 和 Date2 相差一天
目前表中仅有5000W条记录,但是查询效率不太理想,在启用10个线程的情况下随机查询 DeviceId 和DeviceDateTime,平均需要5.7秒,最长时间需要40秒
这个表已经是分区表,按 DeviceDateTime 进行 range 分区,但目前的5000W条数据全部都放在一个分区里。不知道分区变小一点会不会有效果。
另外,有什么办法做集群,因为我已经启用了事务日志,用另一台 mysql 作从机,但目前从机的功能只是用来做热备份而已。能不能多整几台服务器,分担主机的查询压力。
8 个解决方案
#1
没有吗?
自己顶一下!
自己顶一下!
#2
看样子数据是按时间排序的,可以从这里下文章,我是菜鸟,表示关注下
#3
先尝试一下索引,对频繁使用的SELECT语句做一下索引。 另外就是如楼主所说,多几个主从,分担查询压力。
#4
索引肯定是做了的,分别在 DeviceId 和 DeviceDateTime 上建了索引
多个主从的办法,能不能做到对应用程序透明?还是说应用程序在进行查询时,要随机选择一个从机?
#5
创建 (DeviceId , DeviceDateTime)索引。
MYSQL PROXY
MYSQL PROXY
#6
能多几台机器的话,通常考虑一下切片了,根据设备 ID 把数据分布到不同的服务器上,这样通过设备 ID,在查询之前就已经把查询分散到不同的机器上了
#7
在我的需求里,创建复合索引比单列索引要快吗?
#8
对。
#1
没有吗?
自己顶一下!
自己顶一下!
#2
看样子数据是按时间排序的,可以从这里下文章,我是菜鸟,表示关注下
#3
先尝试一下索引,对频繁使用的SELECT语句做一下索引。 另外就是如楼主所说,多几个主从,分担查询压力。
#4
先尝试一下索引,对频繁使用的SELECT语句做一下索引。 另外就是如楼主所说,多几个主从,分担查询压力。
索引肯定是做了的,分别在 DeviceId 和 DeviceDateTime 上建了索引
多个主从的办法,能不能做到对应用程序透明?还是说应用程序在进行查询时,要随机选择一个从机?
#5
创建 (DeviceId , DeviceDateTime)索引。
MYSQL PROXY
MYSQL PROXY
#6
能多几台机器的话,通常考虑一下切片了,根据设备 ID 把数据分布到不同的服务器上,这样通过设备 ID,在查询之前就已经把查询分散到不同的机器上了
#7
创建 (DeviceId , DeviceDateTime)索引。
MYSQL PROXY
在我的需求里,创建复合索引比单列索引要快吗?
#8
创建 (DeviceId , DeviceDateTime)索引。
MYSQL PROXY
在我的需求里,创建复合索引比单列索引要快吗?