猿问

查询优化的一个问题

我有一个表exchange
CREATETABLE`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
性能开销很大,想请教下,有没有更好的方法?
郎朗坤
浏览 344回答 2
2回答

叮当猫咪

我有一个想法,不知道是否可行。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结构不需要改动,防止以后业务改动,有涉及统计的功能。这种方案不知如何?

喵喔喔

数据量没有超过200万,你这个查询速度在300ms左右,如果开启了缓存,会更快,如果你数据量超过200万,timestamp加索引,速度也非常可观,不知道你的数据量如何
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答