实施用于组织历史库存数据的数据库模式
Implement database schema for organizing historical stock data
我是 MySQL 的新手,我尝试使用 MySQL 来存储我的股票数据。
我按照boe100
在参考中的回答:
- Database schema for organizing historical stock data
我按如下方式创建 table:
mysql> 描述 StockDailyQuotations;
Field
Type
Null
Key
Default
Extra
ts_code
varchar(9)
NO
PRI
NULL
trade_date
int(8)
NO
PRI
NULL
open
decimal(6,2)
NO
NULL
high
decimal(6,2)
NO
NULL
low
decimal(6,2)
NO
NULL
close
decimal(6,2)
NO
NULL
change
decimal(6,2)
YES
NULL
pct_chg
float
YES
NULL
vol
float
YES
NULL
amount
float
YES
NULL
10 rows in set (0.00 sec)
我总是通过以下两种方式使用 table:
(1)查询一只股票的历史数据,耗时0.01秒
SELECT * FROM StockDailyQuotations WHERE ts_code='000001.SZ';
(2) 一天内搜索所有股票的数据。耗时1.94秒。
SELECT * FROM StockDailyQuotations WHERE trade_date='20201231';
参考资料中的答案说:“我们在符号、日期和时间列上也有一个聚集索引。
我们可以在几毫秒内从服务器中获取数据。请记住,数据库大小几乎是 1 TB。”但就我而言,搜索 1 已经足够快,我想加速类型 2 搜索。
我认为 ts_code 和 trade_date 上的主键已经成为聚簇索引。
我误解了什么吗?如何加速搜索(2)?
如果这是一个愚蠢的问题,我深表歉意。感谢您的宝贵时间。
我为 'trade_date' 创建了一个索引,搜索方式 (2) 可以与方式 (1) 具有相同的性能。
(不是“傻问题”,只是“菜鸟问题”)
PRIMARY KEY(ts_code, trade_date)
INDEX(trade_date)
但是有trade_date DATE
(没有INT
)
DECIMAL(6,2)
限制你为9999.99;可以吗?
使用ENGINE=InnoDB
注意其他未标记 [mysql] 或 [mariadb] 的问题;他们可能有不利于 MySQL.
的语法和其他建议
如果包括“时间”,最好使用单个 DATETIME
列,而不是两列(DATE
和 TIME
)。但是,这会在请求给定日期的信息时导致一些棘手的业务。
我是 MySQL 的新手,我尝试使用 MySQL 来存储我的股票数据。
我按照boe100
在参考中的回答:
- Database schema for organizing historical stock data
我按如下方式创建 table:
mysql> 描述 StockDailyQuotations;
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
ts_code | varchar(9) | NO | PRI | NULL | |
trade_date | int(8) | NO | PRI | NULL | |
open | decimal(6,2) | NO | NULL | ||
high | decimal(6,2) | NO | NULL | ||
low | decimal(6,2) | NO | NULL | ||
close | decimal(6,2) | NO | NULL | ||
change | decimal(6,2) | YES | NULL | ||
pct_chg | float | YES | NULL | ||
vol | float | YES | NULL | ||
amount | float | YES | NULL |
10 rows in set (0.00 sec)
我总是通过以下两种方式使用 table:
(1)查询一只股票的历史数据,耗时0.01秒
SELECT * FROM StockDailyQuotations WHERE ts_code='000001.SZ';
(2) 一天内搜索所有股票的数据。耗时1.94秒。
SELECT * FROM StockDailyQuotations WHERE trade_date='20201231';
参考资料中的答案说:“我们在符号、日期和时间列上也有一个聚集索引。 我们可以在几毫秒内从服务器中获取数据。请记住,数据库大小几乎是 1 TB。”但就我而言,搜索 1 已经足够快,我想加速类型 2 搜索。
我认为 ts_code 和 trade_date 上的主键已经成为聚簇索引。 我误解了什么吗?如何加速搜索(2)?
如果这是一个愚蠢的问题,我深表歉意。感谢您的宝贵时间。
我为 'trade_date' 创建了一个索引,搜索方式 (2) 可以与方式 (1) 具有相同的性能。
(不是“傻问题”,只是“菜鸟问题”)
PRIMARY KEY(ts_code, trade_date)
INDEX(trade_date)
但是有trade_date DATE
(没有INT
)
DECIMAL(6,2)
限制你为9999.99;可以吗?
使用ENGINE=InnoDB
注意其他未标记 [mysql] 或 [mariadb] 的问题;他们可能有不利于 MySQL.
的语法和其他建议如果包括“时间”,最好使用单个 DATETIME
列,而不是两列(DATE
和 TIME
)。但是,这会在请求给定日期的信息时导致一些棘手的业务。