【发布时间】:2016-11-26 05:42:46
【问题描述】:
我在 MyISAM 存储引擎上的 MySQL 中有大量行(数十亿)以下模式。关于如何更有效地存储(存储方面)的任何建议?
mysql> describe options;
+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| stockid | int(10) unsigned | NO | MUL | NULL | |
| strike | float | NO | | NULL | |
| symbol | varchar(63) | NO | | NULL | |
| last | float | NO | | NULL | |
| chg | float | NO | | NULL | |
| bid | float | NO | | NULL | |
| ask | float | NO | | NULL | |
| expirydate | varchar(63) | YES | | NULL | |
| ticker | varchar(63) | YES | | NULL | |
| expiry | datetime | YES | | NULL | |
| type | varchar(63) | YES | | NULL | |
| datecaptured | datetime | YES | | NULL | |
| volume | bigint(20) | YES | | NULL | |
| openint | bigint(20) | YES | | NULL | |
| lastclosedate | date | YES | | NULL | |
| row_id | int(11) | NO | PRI | NULL | auto_increment |
+---------------+------------------+------+-----+---------+----------------+
【问题讨论】:
-
int(11)可能没有想象的那么大 - 它的容量不超过int(2)。如果这真的是“数十亿”,那将是一个问题。 -
last/chg/bid/ask 列看起来像与市场价格相关的值,
FLOAT是一个非常危险的数据类型选择,其中涉及金钱,除非您可以接受不精确的近似值,这是使FLOAT相对节省空间的权衡。您熟悉它的局限性吗? -
确实是这样——将钱存储为 INT *100 的做法是什么?还是有更好的模型?
标签: mysql