• ベストアンサー

1000件以下の場合はカラム数に関係なくキー不要?

全てのカラムを対象にソートや絞り込みをする、また、テーブルを分割する必要がない場合、 全てのカラムにインデックスをつけるしかないと考えていましたが、 http://www28.atwiki.jp/lucier/pages/55.html 「MySQLでは1000件以下のデータの場合はインデックスを作成しないほうが 速い」 1000フィールドならカラムの数に関係なくインデックス不要で カラムの数が10の場合と、 カラムの数が50の場合 それぞれ負荷はかわらないということでしょうか。

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

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.5

 検索のためのインデックスのことでしたら、たくさんの解答が付いているとおりです。  ただ、No1さんの解答へのお礼の後半ですが、基本的にはその認識で合ってます。  というのは、主キー(primary key)に関しては、検索のためのインデックス「にも」使用されますが、主用途は違います。  テーブルの整合性の要となるフィールドです。 主キー指定が行われたフィールドに対しては、強制的に、not nullとuniqueが指定されている物とみなされ、その実装手段としてインデックスもつきます。  外部参照のためのreference keyで使える唯一のフィールドともなります。  本来のリレーショナルデータベースの理論によれば、テーブルには主キーが必ず定義されていなくてはならないものです。これは、レコードの一意性を保証するための制約です。  複数フィールドを合わせて主キーとすることもありますし、下手をするとテーブルの全フィールドを併せて主キーとすることまであります。  主キーに関しては、検索の効率はあくまでおまけ。他の仕事の方がよほど重要なんだと思っておいてください。(現に、複数フィールドで主キーを構築すると、インデックスとしての使い勝手は落ちます。そのため、主キーを構成する一つのフィールドに手動でインデックスを構成することも珍しい話ではありません。)

kiseki777
質問者

お礼

良く分かりました。ありがあとうございました。

その他の回答 (5)

回答No.6

カラム・フィールド・レコードの意味を間違っています。 EXCELで言う「カラム(列)」=「フィールド」です。

kiseki777
質問者

お礼

列:フィールド、カラム 行:レコード ですね。ありがとうございます。

回答No.4

参照先の「MySQLでは1000件以下のデータの場合はインデックスを作成しないほうが 速い」の「1000件」とは、レコード数のことです。 つまり1000レコード以下のテーブルなら、わざわざ検索フィールドにインデックスを付けるような対策をしなくても早く検索できる、ということのようです。

kiseki777
質問者

お礼

エクセルでいう 列を「カラム」 行を「フィールド」または「レコード」 セルに入っている値を「データ」 だと認識していますが、あっていますよね?

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

EXPLAINでテストして早いほうをつかう

kiseki777
質問者

お礼

調べてみます。

回答No.2

>MySQLでは1000件以下のデータの場合は >インデックスを作成しないほうが速い」 インデックスを設定するとインデックス分の容量が増加し、更新スピードがインデックスを登録する分遅くなります、インデックスは検索が遅くなって支障をきたすようになった時点で作成する事を推奨します。 >カラムの数が10の場合と、カラムの数が50の場合 >それぞれ負荷はかわらないということでしょうか。 カラム数が増えればレコードの容量が増えるので負荷は上がります、どちらにしても許容できる検索スピードであればインデックスを作らなくても良いです。

kiseki777
質問者

お礼

レコードがいくら1000行以内でもカラムが多ければ多いほど、そういえないといことなのですね。インデックスも極力さけるべき。よくわかりました。ありがとうございます。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

根拠が不明ですね。 現在のバージョンではデフォルトのストレージエンジンはInnoDBになっており、これは主キーを定義しなくても暗黙の主キーを定義してしまいます。 主キーが特定できるなら、定義したほうがいいと思います。 セカンダリインデックスは索引の選択性の問題です。索引で検索しても全体の20%を超えるようならインデックスは張ってもあまり意味はなく、更新の負荷が大きくなるだけです。

kiseki777
質問者

お礼

>全体の20%を超えるようならインデックスは張ってもあまり意味はなく、 >更新の負荷が大きくなるだけ 1000フィールドを超えるならインデックスキーが必要になります。 カラムが50個あった場合、10個(50×20%)まではインデックスを張るのは意味がありますが、それを超える分は効果がないばかりか負荷が大きくなります。 1000フィールド以内であればインデックスキーは全てのカラムで不要です。 ただし、主キーだけは必ず設定したほうがいい。 ということでしょうか?

関連するQ&A