2

我有一张包含 5 年 200 家公司股票价格的表格。这是一张大表,包含公司名称、股票开盘价、最高价、最低价、收盘价、日期

我现在需要对其进行一些处理,并让用户 [最多 10 个] 访问此数据库以获取有关不同参数和查询集的报告。

我应该按原样使用数据库还是您有什么建议可以使其更加优化。

谢谢。

4

8 回答 8

3

提取名称并使用整数 ID。它应该更快,并且可以容忍名称更改。股票代码也可以提取到父表中。

于 2008-11-25T11:50:09.073 回答
2

我认为您需要考虑报告,例如,它们是否总是按月进行?如果是这样,您可以创建一个汇总数据表。

否则,我认为谨慎的索引是您提高性能的唯一选择

于 2008-11-25T11:50:41.320 回答
1

如果它真的只是带有该数据的公司名称,那么它已经被规范化了。如果有更多关于公司的信息,例如地址、电话等,那么您可能希望将其分解为单独的表格。

于 2008-11-25T11:48:25.707 回答
1

对某人的错误引用:

优化规则

  1. 不要这样做。
  2. 仅限专家:暂时不要这样做。

如果问题是“......我是放手还是放手make it more optimized”,不要管它,直到您通过测量知道存在问题为止。

如果表的查询或更新出现问题,请使用有关查询的详细信息、任何索引、表的更新/访问频率等更新您的问题。届时您将获得各种建议。

如前所述,就规范化而言,如果同一公司名称在表中多次出现,您可能会考虑将公司名称提取到其自己的表中。

于 2008-11-25T12:33:59.813 回答
0

我会为公司准备一张表格,以及给定日期的股票价格表格(开盘/高/低/收盘位),以节省到处复制公司信息。

于 2008-11-25T11:49:38.747 回答
0

我会为日期添加一个 UID 字段和几个维度(即年表、年+月表、年+季度表、财政年表等)。

于 2008-11-25T11:51:37.840 回答
0

规范化和优化并不总是一回事。

您的用户将如何处理这些数据?

于 2008-11-25T11:57:43.600 回答
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)
);

有关密钥生成的信息,请参见此处

顺便问一下,你们如何处理公司更名的问题?忽略这将是一个简单的答案,但它是否正确?:)

因此,无论如何,如果表变得太大而无法获得良好的性能,我只会对其进行分区

于 2008-11-25T12:31:46.573 回答