0

統計と合計の 2 つのテーブルを持つ大規模なデータベースがあります。

関係の例は次のとおりです。

ステータス:

|   ID   |  total event |
+--------+--------------+
|   7    |  2           |
|   8    |  1           |

合計:

|ID | Event        |
+---+--------------+
| 7 | "hello"      |
| 7 | "everybody"  |
| 8 | "hi"         |

これは非常に単純化されたバージョンです。また、STAT テーブルには 500K のレコードがあり、STAT ごとに約 200 の TOTAL 行を持つことができると考えてください。

現在、テーブル TOTAL で単純なSELECTクエリを実行すると、システムが非常に遅くなります。

TOTAL テーブルを作成するためのアドバイスをくれる人はいますか? idたとえば、最後まですべての行をスキャンする理由がないように、列が既にソートされていることを MySQL に伝えることはできid=7ますか?

4

3 に答える 3

2
  1. INDEX(ID)まだ行っていない場合は、テーブル (両方) に追加します。

  2. SELECT COUNT(*) FROM TOTAL WHERE ID=7-> indexedIDの場合、これは高速になります。

于 2012-06-25T15:16:34.170 に答える
0

@ypercubeのコメントによると、テーブルはソートされた状態で保存されないため、これをデータベースに「伝える」ことはできません。ただし、テーブルにインデックスを追加して、テーブルの検索を高速化することができます。

チェックする重要なことの1つ(外部キーとして意図されているように見えTOTAL.IDます)の場合、テーブルには。TOTALという主キーが必要IDです。その名前の既存の列の名前をSTAT_ID代わりに変更して、それが外部キーであることが明らかになるようにします。次に、にインデックスを追加しますSTAT_ID

最後に、スタイルのポイントとして、テーブル名と列名で大文字と小文字を区別せず、小文字で記述することをお勧めします。キーワードが大文字で、データベースオブジェクトが小文字の場合、SQLが読みやすくなります。

于 2012-06-25T15:23:06.730 に答える
0

インデックスを追加でき、さらにテーブルを分割できます。

于 2012-06-25T15:16:19.260 に答える