- 締切済み
複数テーブルとIndex
windows+mysql(4.0.xx)でブログのようなサイトを自宅で立ち上げています。 現在、一人ブログに登録すると、その人専用のテーブルを作成するという形にしています。 人が増えるたびに、同じ構成のテーブルが増えていくわけですが、以前100人前後の利用者だったときに速度を測定してみたところ、1テーブルに全員のデータを記録しIndexを張った場合より、別々のテーブルを作成したほうが高速だったために、上記のような冗長構成としました。 今現在、少し人が増えて1000人前後で、特に速度的にも問題はないのですが、これが1万人、10万人と増えた場合に同じような結果となるのか不安があります。(.frmファイルが大量に増えているので・・・) そこで 1)現在と同じように一人一テーブルとする。 2)全員で一テーブルとする。 のどちらが良いかアドバイスを皆様からいただきたいのです。 冗長性や正規化という観点よりも、検索速度の点からアドバイスいただければ幸いです。 (おそらく、NTFSのB+木検索と、MySQLのインデックス検索のどちらが早いかという問題になると思うのですが、データベース自体に疎く、以前、自分で出した結論(B+木のほうが優秀)にあまり自信がありません。) 以上、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>検索速度の点から 一人1テーブルだと他のテーブルを横断的に検索するのは 非常にめんどうだとおもいます。 ハンドリングだけでも負荷がおおきく検索速度もなにもないでしょう 逆に1検索につき特定の一人しか対象にならないなら一人1テーブルでも それほど問題はないかも 実際問題なにを検索対象としているかによって速度の尺度がちがいます。 日本語全文検索まで視野にいれているなら、それなりの仕組みが必要ですからね
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLは、母体データ件数が少ない場合、インデクスを利用しません。これは、インデクスを経由せず、データ部を直接読み込んだ方が早いとオプティマイザが判断するからです。 行長が分からないし、検索条件にもよるので具体的には答えられませんが、母体データが数千件~1万件程度辺りで、インデクスを有効利用できる検索条件(=やBETWEEN、IN条件、LIKEの前方一致など)で絞り込んだ検索を行えば、インデクスは利用されるはずです。 実際に利用されているかは、EXPLAINで確認してください。 >冗長性や正規化という観点よりも、検索速度の点からアドバイス 論外です。