我有一张包含 5 年 200 家公司股票价格的表格。这是一张大表,包含公司名称、股票开盘价、最高价、最低价、收盘价、日期
我现在需要对其进行一些处理,并让用户 [最多 10 个] 访问此数据库以获取有关不同参数和查询集的报告。
我应该按原样使用数据库还是您有什么建议可以使其更加优化。
谢谢。
我有一张包含 5 年 200 家公司股票价格的表格。这是一张大表,包含公司名称、股票开盘价、最高价、最低价、收盘价、日期
我现在需要对其进行一些处理,并让用户 [最多 10 个] 访问此数据库以获取有关不同参数和查询集的报告。
我应该按原样使用数据库还是您有什么建议可以使其更加优化。
谢谢。
提取名称并使用整数 ID。它应该更快,并且可以容忍名称更改。股票代码也可以提取到父表中。
我认为您需要考虑报告,例如,它们是否总是按月进行?如果是这样,您可以创建一个汇总数据表。
否则,我认为谨慎的索引是您提高性能的唯一选择
如果它真的只是带有该数据的公司名称,那么它已经被规范化了。如果有更多关于公司的信息,例如地址、电话等,那么您可能希望将其分解为单独的表格。
对某人的错误引用:
如果问题是“......我是放手还是放手make it more optimized
”,不要管它,直到您通过测量知道存在问题为止。
如果表的查询或更新出现问题,请使用有关查询的详细信息、任何索引、表的更新/访问频率等更新您的问题。届时您将获得各种建议。
如前所述,就规范化而言,如果同一公司名称在表中多次出现,您可能会考虑将公司名称提取到其自己的表中。
我会为公司准备一张表格,以及给定日期的股票价格表格(开盘/高/低/收盘位),以节省到处复制公司信息。
我会为日期添加一个 UID 字段和几个维度(即年表、年+月表、年+季度表、财政年表等)。
规范化和优化并不总是一回事。
您的用户将如何处理这些数据?
这不是优化(尽管您可以争辩说这是一种规范化,前提是公司可以更改名称):
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)
);
有关密钥生成的信息,请参见此处。
顺便问一下,你们如何处理公司更名的问题?忽略这将是一个简单的答案,但它是否正确?:)
因此,无论如何,如果表变得太大而无法获得良好的性能,我只会对其进行分区。