アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

ただ、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個存在する。

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

A 回答 (2件)

テーブルを分ける意味は全くありません。


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

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

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

お礼日時:2011/08/11 18:03

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



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

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

お礼日時:2011/08/11 18:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!