データベースのインデックスって読み込み速度だけに関して言えば、極論、全てのカラムにインデックスを貼った方が良いのでしょうか?インデックスについて勉強しているところなのですが、混乱中でございます。
全てのカラムにインデックス貼ったら意味ないだろwidと関連があるカラムに貼るんだろ。
「読み込み速度だけに関して言えば、極論、全てのカラムにインデックスを貼った方が良い」というのは間違いではないです。(あまりに大量のインデックスを作ると目的のインデックスを探すのに時間をとられる可能性がありますが)ただ、検索時には必要なインデックスだけ使われますから、使われないインデックスを作るのは全く意味がないです。
また、読み込み速度以外に目を向ければ、インデックスが多いほど書き込み時に時間がかかりますから、最小限にしたほうがいいです。
それでも、インデックスなしで検索するよりはインデックスがあったほうがいいです。
そうかなあ。フィールド数×レコード数にインデックスを貼るのなら、レコード数次第で膨大な物理容量を必要としてしまうから、レコード数によっては最終的にどんなクエリを実行しても究極的に遅いテーブルになっちゃうと思うけど。
レコード特定→データ読み込み、の順で動いてて、データの読み込み速度じゃなくてレコードの特定を高速化するのがインデックスの仕事。
必要なレコード特定に必要な情報(検索に使われるキーワードとか、一意のIDを構成するもの)をまとめておいて、どれを読みに行くか決める段階はできるだけメモリ内で完結するようにするためのもの。
インデックスを使わないと、全レコード読み出して頭から付き合わせをはじめる。メモリにおさまらない大きさのテーブルだったら、全部検索し終わるまでストレージとメモリの出し入れ分の時間が余計にかかる。
読み込み速度あげるのは、テーブルをオンメモリに展開するストレージエンジンとかを使う。
って感じで理解してるけど、合ってる?
みんなの回答 3 件
全てのカラムにインデックス貼ったら意味ないだろw
idと関連があるカラムに貼るんだろ。
「読み込み速度だけに関して言えば、極論、全てのカラムにインデックスを貼った方が良い」というのは間違いではないです。
(あまりに大量のインデックスを作ると目的のインデックスを探すのに時間をとられる可能性がありますが)
ただ、検索時には必要なインデックスだけ使われますから、使われないインデックスを作るのは全く意味がないです。
また、読み込み速度以外に目を向ければ、インデックスが多いほど書き込み時に時間がかかりますから、最小限にしたほうがいいです。
それでも、インデックスなしで検索するよりはインデックスがあったほうがいいです。
レコード特定→データ読み込み、の順で動いてて、データの読み込み速度じゃなくてレコードの特定を高速化するのがインデックスの仕事。
必要なレコード特定に必要な情報(検索に使われるキーワードとか、一意のIDを構成するもの)をまとめておいて、どれを読みに行くか決める段階はできるだけメモリ内で完結するようにするためのもの。
インデックスを使わないと、全レコード読み出して頭から付き合わせをはじめる。メモリにおさまらない大きさのテーブルだったら、全部検索し終わるまでストレージとメモリの出し入れ分の時間が余計にかかる。
読み込み速度あげるのは、テーブルをオンメモリに展開するストレージエンジンとかを使う。
って感じで理解してるけど、合ってる?
関連するトピックス