• 締切済み

複数テーブルとIndex

windows+mysql(4.0.xx)でブログのようなサイトを自宅で立ち上げています。 現在、一人ブログに登録すると、その人専用のテーブルを作成するという形にしています。 人が増えるたびに、同じ構成のテーブルが増えていくわけですが、以前100人前後の利用者だったときに速度を測定してみたところ、1テーブルに全員のデータを記録しIndexを張った場合より、別々のテーブルを作成したほうが高速だったために、上記のような冗長構成としました。 今現在、少し人が増えて1000人前後で、特に速度的にも問題はないのですが、これが1万人、10万人と増えた場合に同じような結果となるのか不安があります。(.frmファイルが大量に増えているので・・・) そこで 1)現在と同じように一人一テーブルとする。 2)全員で一テーブルとする。 のどちらが良いかアドバイスを皆様からいただきたいのです。 冗長性や正規化という観点よりも、検索速度の点からアドバイスいただければ幸いです。 (おそらく、NTFSのB+木検索と、MySQLのインデックス検索のどちらが早いかという問題になると思うのですが、データベース自体に疎く、以前、自分で出した結論(B+木のほうが優秀)にあまり自信がありません。) 以上、よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数1

みんなの回答

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

>検索速度の点から 一人1テーブルだと他のテーブルを横断的に検索するのは 非常にめんどうだとおもいます。 ハンドリングだけでも負荷がおおきく検索速度もなにもないでしょう 逆に1検索につき特定の一人しか対象にならないなら一人1テーブルでも それほど問題はないかも 実際問題なにを検索対象としているかによって速度の尺度がちがいます。 日本語全文検索まで視野にいれているなら、それなりの仕組みが必要ですからね

回答No.1

MySQLは、母体データ件数が少ない場合、インデクスを利用しません。これは、インデクスを経由せず、データ部を直接読み込んだ方が早いとオプティマイザが判断するからです。 行長が分からないし、検索条件にもよるので具体的には答えられませんが、母体データが数千件~1万件程度辺りで、インデクスを有効利用できる検索条件(=やBETWEEN、IN条件、LIKEの前方一致など)で絞り込んだ検索を行えば、インデクスは利用されるはずです。 実際に利用されているかは、EXPLAINで確認してください。 >冗長性や正規化という観点よりも、検索速度の点からアドバイス 論外です。

関連するQ&A

  • 大きいデータ数のテーブルに対するインデックス作成

    mySQL server 5.1 でのindex作成について質問です かなり大きいデータ数(1000億)のテーブルを扱う必要があり検索速度向上のためにindexを作成しようとしています。テーブルのdouble型のカラムに対してインデックス作成コマンドを入力しましたが(create index)、数日経ってもまだインデックス作成が終わりません。長すぎて何か問題でも起きているのでは、と思ってのですが同様の形式のサイズの小さいデータベースに対して同様の処理を行うと問題なく終わります。 なんらかの方法でインデックス作成のスピードを上げることは可能でしょうか?たとえばint型のデータ型に変換するとスピードが向上するなどはあるでしょうか?

    • ベストアンサー
    • MySQL
  • 巨大テーブルからインデックスを複数削除する場合について

    巨大テーブルのINDEXを複数削除したいのですが、 MySQLでインデックスを削除すると、 テンプテーブルを作成してしまうので、 テンプテーブルが作られるのを1度で済ませたいのですが、 DROP INDEX構文で、複数のINDEXを指定する事は無理でしょうか?

    • ベストアンサー
    • MySQL
  • 複数のインデックスについて

    以下のようなテーブルで、 ------------------------- テーブル名:hoge カラム1:name(名前) カラム2:age(年齢) カラム3:job(職業) INDEX age(age) ------------------------- 今現在、年齢で検索することが多いため、ageにIndexを張っているのですが、職業でも検索したいと思っています。 (今現在、職業で検索するとIndexが関係ないためか低速です。) この場合、「ALTER TABLE hoge ADD INDEX job(job)」で大丈夫でしょうか? インデックスが良くわかってないのですが、こうすると、今の年齢用のインデックスとは、全く別のインデックスが作成されると思って良いのでしょうか? (年齢のインデックスの下に職業のインデックスが作成され、職業で検索しても、結局、年齢のインデックスをまたぐため低速になる、なんてことは無いのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数のインデックスの貼り方

    MySQL5.1をUNIX上で使っています。 インデックスの貼り方について教えて下さい。 参照も更新もする膨大な量のテーブルに、 FIELD_1 FIELD_2 FIELD_3 FIELD_4 FIELD_5 FIELD_6 とありまして、FIELD_1とFIELD_2にPRIMARYキーを付けています。 それで、検索用に、 FIELD_1+FIELD_2+FIELD_3のインデックス と FIELD_1+FIELD_2+FIELD_4のインデックス を付けています。 PRIMARYまで含めると、Indexとなりうるものが、3つあり、どれもFIELD1とFIELD2が重複しておりますが、このようなインデックスの貼り方で宜しいでしょうか? 重複しているのが気になるのですが、これしかやり方が思いつきませんでした。 アドバイス頂けると助かります。宜しくお願いします。

  • UNIQUEをつけたときのINDEXテーブル

    テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか? 具体的には、ユニークなカラムidを持つテーブルtableA create table tableA( id INTEGER UNIQUE, some_column INTEGER ); を作ったあとで、そのidにあらためて CREATE INDEX id ON tableA (id); と、インデックスを張る必要があるのでしょうか。 よろしくお願いします。

  • 検索条件が複数の場合のインデックスの張り方

    Mysql5.0 + ASP.NETで開発中です。 サーバーはWindows2003サーバーです。 とある検索サイトを作っていますが、1テーブルのフィールド数が80くらいあります。 また、レコード数は常時100万件程度です。 このテーブルの検索を行うときに、ユーザーが任意の検索条件を設定できるような画面なのですが、実際に検索に使用されるフィールド数は最大で10です。 例えば、where a = 999 and b = 999 や where a = 999 and c = 999 and f = 999 や where b = 999 and d = 999 and f = 999 and g = 999 など、where句で使用されるフィールドがユーザーの指定により常に異なります。(999は任意の値です) ORDER BYに使用されるフィールド数は3です。 現状ではインデックスは張っていないため、かなり検索速度が遅いため、インデックスを張りたいのですが、どのような張り方がいいのかがわかりません。 このような場合、インデックスを張る方法として、どの方法が一番よいのでしょうか? 1.検索に使用される10つのフィールドに1つずつ張ればよい 2.検索に使用される10つのフィールドとソートに使用される3つのフィールドに1つずつ張ればよい 3.where句の組み合わせを全て考えて複合インデックスを張る必要がある。 4.その他 また、80フィールドのテーブルを適当に4つくらいに分けて、検索時に結合すれば早くなったりするものでしょうか?

  • インデックスについて

    宜しくお願いします。 MySQLで検索速度を上げる為にカラム毎に設定するINDEXですが、 fulltextとindexの2種を使えば、全カラムにINDEXを付けられると思いますが、検索するか分からないカラムにもINDEXをつけた場合、何か不都合がおこりますか? 例えば、INDEXが多すぎると逆に検索が遅くなるなどです。 ちなみに、fulltextは日本語に対応していないのは理解しております。

    • ベストアンサー
    • MySQL
  • postgres table作成時にindex付与

    MySQLでは以下のようにテーブル作成時にインデックス付与ができます。 CREATE TABLE test ( a int(11) NOT NULL DEFAULT '0', b int(11) DEFAULT NULL, PRIMARY KEY (a), KEY test_idx (b), -- ★インデックス その1 KEY test_idx2 (a) -- ★インデックス その2 ); ポスグレではできませんか?

  • PRIMARYKEYとINDEX その2

    あるテーブルのPRIMARYKEYとして, A,B,Cの3項目この順で指定しました。 ところがこのテーブルをA単独で検索することが あります。 この場合,A単独でINDEXを作成したほうが良いでしょうか? それともPRIMARYKEYで作成したINDEX(A,B,C)で事足りるでしょうか? また初歩的な質問になるかと思いますが, 宜しくお願いします。

  • インデックスについて

    インデックスの有無は検索速度に大きな影響を与えると思いますが、どのような項目にインデックスを定義すると、効果が高いですか? また、同一テーブルに複数のインデックスが定義されていた場合に、使用するインデックスがどのようにして選択されるのでしょうか? 簡単な説明でけっこうですのでお願いします。