0

数据库类型:mysql

列:日期、时间、价格 1、数量 1、价格 2、数量 2 时间将以毫秒为单位,一个月的记录数约为 550 万。

我不能选择日期作为主键,因为它不是唯一的,但可以选择日期和时间组合,但这也不是一个好主意。

我将在“这个日期和时间”和“那个日期和时间”之间运行诸如选择价格和数量之类的查询,结果可能在数百万范围内。

就主键、索引和代理键而言,什么是最佳选择,以及实现这一点的最佳方式是什么。我应该如何优化数据库。

4

2 回答 2

0

由于您没有自然键(因此每一行中没有唯一的),您需要添加一个代理键(为了参数“transactionid”)。您仍然可以根据日期时间(实际上应该是单列)建立索引,以进行有效的周期扫描。

于 2010-12-30T17:00:11.510 回答
0

不知道为什么你说同时选择日期和时间是个坏主意(你反对复合键吗?)

对您来说更大的问题是时间不存储毫秒。有关更多数据,请参阅此错误:http ://bugs.mysql.com/bug.php?id=8523

此外,标识股票的键中似乎缺少某些东西,例如 Ticker。由于股票代码会随着时间而变化,因此最好为其引入一个代理项,例如 StockID。您可以在名为 Stock 或类似的表中执行此操作。

然后对于您的交易表,我建议使用 StockID、日期和时间(但将时间存储在 TIME 数据类型以外的其他数据类型中,以便您可以存储毫秒。如果您需要帮助,请提出另一个问题)。

PK 中密钥的顺序对于存储和检索都很重要。对于检索,您希望首先为您的查询放置最具选择性的键。因此,如果您倾向于一次访问一只股票(或一组股票)的所有数据,请将 StockID 放在首位,以便可以使用索引快速找到它们。如果您倾向于访问给定时间间隔的所有数据,请先放置日期,然后是时间。

对于存储,最好是附加,因此在这里首先设置日期和时间也是一个好主意。

如果您想主要在日期范围内访问,但有时通过 Stock 访问,请在 StockID 上放置一个二级索引。

于 2010-12-30T21:42:23.220 回答