2

5年間の200社の株価で構成されるテーブルがあります。これは、会社名、始値、高値、安値、終値、日付で構成される 1 つの大きなテーブルです。

同じ処理を行う必要があり、ユーザー [最大 10 人] がこのデータベースにアクセスして、さまざまなパラメーターとクエリのセットに関するレポートを取得できるようにする必要があります。

データベースをそのまま使用する必要がありますか、それともより最適化するための提案はありますか。

ありがとう。

4

8 に答える 8

3

名前を取り出し、整数 ID を使用します。より高速で、名前の変更を許容します。銘柄記号も親テーブルに抽出できます。

于 2008-11-25T11:50:09.073 に答える
2

レポートを検討する必要があると思いますが、たとえば、レポートは常に月ごとになるのでしょうか? もしそうなら、集計データのテーブルを作成できます。

そうでなければ、慎重なインデックスがパフォーマンスの唯一の選択肢だと思います

于 2008-11-25T11:50:41.320 に答える
1

誰かの誤った引用:

最適化のルール

  1. やらないでください。
  2. EXPERTS のみ: まだ実行しないでください。

質問が「... そのままにしておくか、それともそのままにしておくかmake it more optimized」である場合は、測定によって問題があることがわかるまで、そのままにしておきます。

テーブルのクエリまたは更新に問題がある場合は、クエリ、インデックス、テーブルの更新/アクセス頻度などの詳細で質問を更新してください。その時点であらゆる種類の提案が得られます。

前述のように、正規化に関する限り、同じ会社名がテーブルに複数回表示される場合は、会社名を独自のテーブルに抽出することを検討できます。

于 2008-11-25T12:33:59.813 に答える
1

それが本当にそのデータを持つ単なる会社名である場合、それはすでに正規化されています。住所、電話番号など、会社に関する情報がさらにある場合は、それを別のテーブルに分割する必要があります。

于 2008-11-25T11:48:25.707 に答える
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 に答える
0

会社の表と、特定の日の株価の表 (始値/高値/安値/終値ビット) を用意して、どこでも会社情報を複製することを避けます。

于 2008-11-25T11:49:38.747 に答える
0

UID フィールドと複数の日付のディメンション (年テーブル、年 + 月テーブル、年 + 四半期テーブル、会計年度テーブルなど) を追加します。

于 2008-11-25T11:51:37.840 に答える
0

正規化と最適化は必ずしも同じではありません。

ユーザーはデータで何をするつもりですか?

于 2008-11-25T11:57:43.600 に答える