質問: PHP+MySQLで下記のような「掲示板サイト」と同等のデータ構造のサイトを作ってます。 説明を分かりやすくするために、「掲示板サイト」にしました。 ------ ・掲示板サイト(約200カテゴリ) ・1日: 約500件のスレッドが作られる ・1日: 全スレッド合計で約5000件の書き込み(レス)がある 頻繁に取得するデータ ・スレッドタイトルのキーワード検索 ・レス内容のキーワード検索 ・全スレッド一覧 ・全レス一覧 ・カテゴリ別のスレッド一覧 ・カテゴリ別のレス一覧 ・日付別のスレッド一覧 ・日付別のレス一覧 ・特定のスレッドのレス一覧 ------ 現状、「category」「thread」「res」で3つのテーブルで、ログを記録しているのですが、 「res」のレコード数が50万件超えたあたりからレスポンスが重くなります。 (一応、インデックスはしてあります。) これを回避するために、テーブルを分割?パーティショニング?したいのですが どのように分割(テーブル設計)するのが最適なのでしょうか? アドバイス下さい。
回答: パーティショニングに関してはこのへんで。 掲示板とかだと、時系列表示で過去のデータの参照が殆ど無いだろうからRANGE使うんじゃないですかね。 ただ、書き込み(INSERT)が重くなってるのならHASHの方がいいのかもしれません。 というか、まずボトルネックを探るのが先じゃないですか?というわけで