我处于需要每分钟存储1900多种加密货币的数据的情况,我使用MySQL innoDB。
当前,表格看起来像这样
coins_minute_id | coins_minute_coin_fk | coins_minute_usd | coins_minute_btc | coins_minute_datetime | coins_minute_timestamp
coins_minute_id = autoincrement id
coins_minute_coin_fk = medium int unsigned
coins_minute_usd = decimal 20,6
coins_minute_btc = decimal 20,8
coins_minute_datetime = datetime
coins_minute_timestamp = timestamp
该表在短时间内迅速增长,每分钟向该表添加1900+行。
数据将以D3.js
折线图的形式用于每种加密货币的历史价格显示。
我的问题是我如何最好地优化该数据库,我曾想过只每5分钟而不是1分钟收集一次数据,但是它仍然会立即合计很多数据,我还想过最好为每种加密货币创建一个唯一的表,喜欢设计数据库的任何人是否都知道其他一些非常聪明和聪明的方法来进行类似的事情?
亲切的问候
(来自评论)
SELECT coins_minute_coin_fk, coins_minute_usd
FROM coins_minutes
WHERE coins_minute_datetime >= DATE_ADD(NOW(),INTERVAL -1 DAY)
AND coins_minute_coin_fk <= 1000
ORDER BY coins_minute_coin_fk ASC
答案 0 :(得分:0)
coins_minute_
前缀;它使SQL混乱而没有提供任何有用的信息。DATETIME
和TIMESTAMP
之间进行转换。UPDATE
语句吗?如果是这样,那么代码比简单的“插入”要复杂得多。而且您需要一个唯一的密钥才能知道要更新的行。SHOW CREATE TABLE
;您提供的内容更具描述性。PARTITION
在没有任何真正理由的情况下这样做。 valid 的常见原因是您要定期删除“旧”数据。如果您要在3个月后删除,我将使用PARTITION BY RANGE(TO_DAYS(...))
构建表并使用每周分区。更多讨论:http://mysql.rjweb.org/doc.php/partitionmaint INSERT
语句快得多。可以采用INSERT INTO x (a,b) VALUES (1,2), (11,22), ...
或LOAD DATA INFILE
的形式。如果您已经有CSV文件,则后者非常好。PRIMARY KEY
和拥有什么次要INDEX(es)
。INDEX(es)
。