我有一张表,其中包含5年的200家公司股票价格。这是一个大表,包括公司名称,股票开仓,高,低,收盘,日期
我现在需要对其进行一些处理,并且让[最多10个]用户访问此数据库以获取有关不同参数和查询集的报告。
我应该按原样使用数据库,还是有任何建议让它更优化。
感谢。
答案 0 :(得分:3)
拉出名称并使用整数ID。它应该更快,并且可以容忍名称更改。股票代码也可以提取到父表。
答案 1 :(得分:2)
我认为您需要考虑报告,例如,它们是否会逐月发生?如果是这样,你可以创建一个汇总数据表。
否则我认为谨慎的索引是你唯一的表现选择
答案 2 :(得分:1)
如果它只是公司名称中包含该数据,那么它已经标准化了。如果有关于地址,电话等公司的更多信息,那么您可能希望将其分解为单独的表格。
答案 3 :(得分:1)
某人的错误引用:
如果问题是“......我不管它还是make it more optimized
”,不管它,直到您通过测量知道存在问题为止。< / p>
如果查询或更新表有问题,请使用有关查询,任何索引,表格更新/访问频率等的详细信息更新您的问题。您将获得各种建议那一点。
如前所述,就规范化而言,如果表中多次出现相同的公司名称,您可以考虑将公司名称提取到自己的表中。
答案 4 :(得分:0)
我有一张公司的桌子,以及一个特定日期股票价格表(开盘/高点/低点/收盘点),以保存在任何地方复制公司信息。
答案 5 :(得分:0)
我会添加一个UID字段和几个日期维度(即年份表,年份+月份表,年份+季度表,会计年度表等)。
答案 6 :(得分:0)
规范化和优化并不总是相同的。
您的用户将使用哪些数据?
答案 7 :(得分:0)
这不是优化(尽管您可以认为这是规范化,只要公司可以更改名称):
CREATE TABLE company (
id INTEGER PRIMARY KEY, -- Well, this would be a serial, but that works different in different DBMS
name VARCHAR(256) UNIQUE
);
CREATE TABLE price (
company_id INTEGER REFERENCES company(id) NOT NULL,
date TIMESTAMP NOT NULL,
open DECIMAL, -- Just grabbed a type here, probably not right for you.
high DECIMAL,
low DECIMAL,
close DECIMAL,
PRIMARY KEY(company_id, date)
);
有关密钥生成的信息,请参阅here。
顺便说一句,你如何处理公司更名?忽略它将是一个简单的答案,但它是否正确? :)
所以,无论如何,如果桌子变得太大而不能获得良好的性能,我只会partition它。