全てのカラムを対象にソートや絞り込みをする、また、テーブルを分割する必要がない場合、
全てのカラムにインデックスをつけるしかないと考えていましたが、
http://www28.atwiki.jp/lucier/pages/55.html
「MySQLでは1000件以下のデータの場合はインデックスを作成しないほうが
速い」
1000フィールドならカラムの数に関係なくインデックス不要で
カラムの数が10の場合と、
カラムの数が50の場合
それぞれ負荷はかわらないということでしょうか。
No.5ベストアンサー
- 回答日時:
検索のためのインデックスのことでしたら、たくさんの解答が付いているとおりです。
ただ、No1さんの解答へのお礼の後半ですが、基本的にはその認識で合ってます。
というのは、主キー(primary key)に関しては、検索のためのインデックス「にも」使用されますが、主用途は違います。
テーブルの整合性の要となるフィールドです。 主キー指定が行われたフィールドに対しては、強制的に、not nullとuniqueが指定されている物とみなされ、その実装手段としてインデックスもつきます。
外部参照のためのreference keyで使える唯一のフィールドともなります。
本来のリレーショナルデータベースの理論によれば、テーブルには主キーが必ず定義されていなくてはならないものです。これは、レコードの一意性を保証するための制約です。
複数フィールドを合わせて主キーとすることもありますし、下手をするとテーブルの全フィールドを併せて主キーとすることまであります。
主キーに関しては、検索の効率はあくまでおまけ。他の仕事の方がよほど重要なんだと思っておいてください。(現に、複数フィールドで主キーを構築すると、インデックスとしての使い勝手は落ちます。そのため、主キーを構成する一つのフィールドに手動でインデックスを構成することも珍しい話ではありません。)
No.4
- 回答日時:
参照先の「MySQLでは1000件以下のデータの場合はインデックスを作成しないほうが
速い」の「1000件」とは、レコード数のことです。
つまり1000レコード以下のテーブルなら、わざわざ検索フィールドにインデックスを付けるような対策をしなくても早く検索できる、ということのようです。
エクセルでいう
列を「カラム」
行を「フィールド」または「レコード」
セルに入っている値を「データ」
だと認識していますが、あっていますよね?
No.2
- 回答日時:
>MySQLでは1000件以下のデータの場合は
>インデックスを作成しないほうが速い」
インデックスを設定するとインデックス分の容量が増加し、更新スピードがインデックスを登録する分遅くなります、インデックスは検索が遅くなって支障をきたすようになった時点で作成する事を推奨します。
>カラムの数が10の場合と、カラムの数が50の場合
>それぞれ負荷はかわらないということでしょうか。
カラム数が増えればレコードの容量が増えるので負荷は上がります、どちらにしても許容できる検索スピードであればインデックスを作らなくても良いです。
レコードがいくら1000行以内でもカラムが多ければ多いほど、そういえないといことなのですね。インデックスも極力さけるべき。よくわかりました。ありがとうございます。
No.1
- 回答日時:
根拠が不明ですね。
現在のバージョンではデフォルトのストレージエンジンはInnoDBになっており、これは主キーを定義しなくても暗黙の主キーを定義してしまいます。
主キーが特定できるなら、定義したほうがいいと思います。
セカンダリインデックスは索引の選択性の問題です。索引で検索しても全体の20%を超えるようならインデックスは張ってもあまり意味はなく、更新の負荷が大きくなるだけです。
>全体の20%を超えるようならインデックスは張ってもあまり意味はなく、
>更新の負荷が大きくなるだけ
1000フィールドを超えるならインデックスキーが必要になります。
カラムが50個あった場合、10個(50×20%)まではインデックスを張るのは意味がありますが、それを超える分は効果がないばかりか負荷が大きくなります。
1000フィールド以内であればインデックスキーは全てのカラムで不要です。
ただし、主キーだけは必ず設定したほうがいい。
ということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- Oracle データベースのカラムの型がCHAR型の場合で 値にシングルコーテーションつけなくても動作する場合と数 3 2022/04/25 12:00
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(プログラミング・Web制作) google formsで回答者をスプレッドシートに記載する方法 1 2023/06/23 11:22
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユニーク制約とユニークインデ...
-
(初心者)MySQLやmaraDBで、crea...
-
一部のカラムでdistinctし全て...
-
LIKEの右側にカラムを指定でき...
-
INDIRECT関数の代替方法は?
-
DBの定義のサイズを大きくし過...
-
now()かCURRENT_TIMESTAMPか
-
GREATESTで NULLをスルーする方...
-
group byで最後のレコードを抽...
-
最大2147483647なのに何故int(1...
-
DBエラーの意味
-
テーブルの列数を調べたい
-
SELECT文で、指定カラム以外の...
-
select * での表示が崩れる?
-
時間範囲が重複したレコードを...
-
mysqlで50音順にorder byしたい。
-
mySQL プライマリーキーのカラ...
-
DB2のBLOB型カラムに格納された...
-
WHEREなどの条件が多い場合、ど...
-
【Transact-sql】 where条件、i...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユニーク制約とユニークインデ...
-
オートインクリメントについて
-
MySQLのKey属性「MUL」について
-
複数カラム検索で、LIKE "%検索...
-
大量の項目を対象に効率的に検...
-
SQL Server Management Studio...
-
インデックスについて
-
UPDATEつてインデックス貼って...
-
MySQLのインデックスについて
-
1000件以下の場合はカラム数に...
-
MySqlでのデータソートについて
-
文字検索 (LIKE)を使った場合
-
インデックス作成について
-
テーブル設計について。
-
複合インデックスの設定に関して
-
インデックスを張るべき項目に...
-
検索エンジン検索結果から削除...
-
INDIRECT関数の代替方法は?
-
DBの定義のサイズを大きくし過...
-
SELECT文で、指定カラム以外の...
おすすめ情報