为了账号安全,请及时绑定邮箱和手机立即绑定

查询优化的一个问题

查询优化的一个问题

郎朗坤 2019-05-14 09:51:14
我有一个表exchangeCREATETABLE`exchange`(`id`int(11)NOTNULLAUTO_INCREMENT,`rank`int(11)NOTNULL,`name`varchar(255)NOTNULL,`volume`varchar(255)NOTNULL,`timestamp`datetimeNOTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=75032DEFAULTCHARSET=utf8;每5分钟,会记录一记数据,每次209条左右,是当前时间209个数字货币交易所的成交量。我期望可以查到这样的数据:rankname[volume(最新的144个值)]timestamp我现在采用的笨办法是,一个个交易所去查,得到交易所列表一个个查selectvolumefromexchangewhereexchange.name='binance'orderbytimestampDESClimit144性能开销很大,想请教下,有没有更好的方法?
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我有一个想法,不知道是否可行。exchange的结构不改动,新建一张表
CREATETABLE`exchange_statistics`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(255)NOTNULL,
`volume_statistics`textNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;
其中volume_statistics字段记录的是通过数组序列化或者符号分割后的最新的144个值,144个值可以是从小到大或者按时间整理好,然后每隔5分钟最前的元素剔除,从后面加入最新的元素。
这样每个交易所预处理好最新的144个值,获取交易所列表直接查询exchange_statistics即可。
exchange结构不需要改动,防止以后业务改动,有涉及统计的功能。
这种方案不知如何?
                            
查看完整回答
反对 回复 2019-05-14
?
喵喔喔

TA贡献1735条经验 获得超5个赞

数据量没有超过200万,你这个查询速度在300ms左右,如果开启了缓存,会更快,如果你数据量超过200万,timestamp加索引,速度也非常可观,不知道你的数据量如何
                            
查看完整回答
反对 回复 2019-05-14
  • 2 回答
  • 0 关注
  • 343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号