数据库类型:mysql
柱: 日期,时间,价格1,qty1,price2,qty2 时间将以毫秒为单位 一个月的记录数约为550万。
我不能选择日期作为主键,因为它不是唯一的,但可以选择合并的日期和时间,但这也不是一个好主意。
我将运行类似的查询 选择“此日期和时间”与“该日期和时间”之间的价格和数量,结果可能在数百万范围内。
在主键,索引和代理键方面可能是最佳选择,实现此目的的最佳方式是什么。我应该如何优化数据库。
答案 0 :(得分:0)
由于您没有自然键(因此每行中没有任何唯一内容),您需要添加代理键(为了参数“transactionid”)。您仍然可以根据日期时间(实际上,确实应该是单列)获得索引,以进行有效的期间扫描。
答案 1 :(得分:0)
不确定为什么你说选择日期和时间都是个坏主意(你是否反对复合键?)
对你来说更大的问题是时间不能存储毫秒。有关该数据的更多数据,请参阅此错误:http://bugs.mysql.com/bug.php?id=8523
此外,标识股票的密钥似乎缺少某些内容,例如Ticker。由于股票代码可以随时间变化,因此引入代理商(如StockID)可能是个好主意。您可以在名为Stock或类似的表中执行此操作。
然后对于您的Trade表,我建议使用StockID,Date和Time(但是将时间存储在TIME数据类型之外的其他内容中,这样您就可以存储毫秒。如果您需要帮助,请再问一个问题)。
PK中键的顺序对于存储和撤销都很重要。要进行检索,您需要先为查询选择最具选择性的键。因此,如果您倾向于一次访问股票的所有数据(或者对于一组股票),请首先放置StockID,以便可以使用索引快速找到它们。如果您倾向于访问给定间隔的所有数据,请先将Date设置为Time。
对于存储,最好先附加日期和时间,这也是一个好主意。
如果您想要主要访问日期范围,但有时需要通过Stock访问,请在StockID上放置二级索引。