みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

1000万件のデータをmysqlで効率良く扱いたい

専門学校の制作でデータを格納・表示するものを作っています。
とはいっても、ブログみたいなアルゴリズムなので難しくはないです。

ただ、mysqlの構造をかんがえる時に疑問があります。

item table構造
id title body categoryid

category table構造
id title

例えば、1000万件のデータを格納する時、

(1)1つのitem tableに1000万件のデータを格納して、
該当カテゴリーのもの一覧表示したり、
該当アイテムのものを表示したりする場合。

(2)item tableをカテゴリーごとに分ける。
cate1_item_table
cate2_item_table
1つのtableには100万件のデータが入り、
cate**_item_tableは10個存在する。

この時、どちらのほうが負荷がかからないでしょうか。
どなたか詳しい方要らしゃれば教えていただけないでしょうか。
どうぞよろしくお願い致します。

投稿日時 - 2011-08-10 09:34:02

QNo.6933337

すぐに回答ほしいです

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

テーブルを分ける意味は全くありません。
理由
1.カテゴリ以外の検索では各テーブルの
 検索結果をUNIONクエリにするが、
 UNIONクエリは効率が悪い。
2.カテゴリ指定時にテーブルを選ぶ処理が
 必要になる。
3.カテゴリが増えたり減ったりした時の
 メンテナンスが面倒である。

item table のcategoryidに索引を設けるか、
category tableと外部キー結合させるなどで
categoryidによる検索を効果的に実行する
ことができます。

投稿日時 - 2011-08-10 12:10:02

お礼

ありがとうございます。
用語を調べて勉強させていただきます。

投稿日時 - 2011-08-11 18:03:34

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

基本的には#1さんに同意ですが・・・

もっと実務ベースでカリカリにチューニングしたい場合、
集計用の中間テーブルをいくつか作り、動きの激しい最近のデータと
静的な古いデータを別々に管理することもあります
集計やデータ抽出にどのような用件があるかを見極めたうえで
設計することになるでしょう。

投稿日時 - 2011-08-10 16:00:05

お礼

実務だとまたかわりそうですね。

投稿日時 - 2011-08-11 18:06:41

あなたにオススメの質問