如何优化此数据的访问?

时间:2008-11-25 11:40:27

标签: database-design optimization normalization

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

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

我应该按原样使用数据库,还是有任何建议让它更优化。

感谢。

8 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

否则我认为谨慎的索引是你唯一的表现选择

答案 2 :(得分:1)

如果它只是公司名称中包含该数据,那么它已经标准化了。如果有关于地址,电话等公司的更多信息,那么您可能希望将其分解为单独的表格。

答案 3 :(得分:1)

某人的错误引用:

优化规则

  1. 不要这样做。
  2. 仅限专家:不要这样做。
  3. 如果问题是“......我不管它还是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它。