• ベストアンサー

データベースの設計について少し疑問が出たので投稿しました。

データベースの設計について少し疑問が出たので投稿しました。 数千万レコードを取り扱う場合、以下のどの構成が一番クエリを早く実行できるのでしょうか? 1.1つのデータベースに1つのテーブルを構築して全てのレコードを格納。 2.1つのデータベース内に複数のテーブルを構築して、レコードを分散して格納。 3.複数のデータベースにそれぞれ1つのテーブルを構築して、レコードを分散して格納。 データベースはMySQLです。 参考までに、ご意見をお聞かせいただければと思います。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

サーバーのリソースおよびDBが限定されているときに、どのような構築が効率的か? どのようなSQLを発行することが多いのかということによって変わってくると思いますが、 一般的に(MySQLのことは何も知らないので) ・適切なインデックスをつける。 ・dbの最適化処理をおこなう。 ・適正なテーブル構造を設計する。 がどれも同じくらい大切だと思います。  例えば、月に100万レコード発生するものから10件の対象レコードを月限定で取り出したいなら、 ・月別にテーブルを作るというのもありですし、 ・テーブルのデータを限定させ、詳しいデータを別なテーブルに置いておくことも効率化につながる場合もあります。 ・別サーバーに別dbを立てて、同じデータを別テーブルに置くということはあまりしません。(同期を取るのがめんどくさいので) また同じサーバーに別インスタンスを作ることは効率化にはつながらないような気がします。

S202
質問者

お礼

アドバイスありがとうございます。 期間で限定してテーブルを分けるという方法がいいようですね。 参考にさせていただきます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

若干視点がずれているように見受けられますが・・・ 複数テーブルを使うのは単にデータをわけるためではなく正規化して 冗長性をなくすためです。 同じ種類のデータを複数にわけても結局はUNIONなどでつなげて集計すれば 負荷はかえってたかくなったり、ユニーク属性やインデックスがうまく 作用しなかったりするでしょう。 なので管理自体は1ですが、一つのテーブルに何でもかんでも冗長に入れれば ボリュームが増えた時にかなりシステム的な負荷が高いので、検索条件を 考えながら分散を検討したほうがよいでしょう。

S202
質問者

補足

説明不足でした。 すいません。 分散というのは、あるくくり(例えば、年単位)で分散するということです。 年で分けた場合、複数年にわたっての検索負荷は増えるのでないものとします。 単純に膨大なレコードを検索する処理として1つのサーバ内での処理を考えたときにどの方法が抽出処理が早いのかなと疑問に思いました。 ご指摘ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A