[解決済み] MySQL のインデックスはどのように機能するのですか?
2022-03-21 06:52:33
質問
MySQL のインデックスがどのように機能するのか、より具体的には、テーブル全体をスキャンせずに要求されたデータを返すにはどうすればよいのか、に非常に興味があります。
本題から外れますが、どなたか詳しく説明していただける方がいらっしゃいましたら、大変、ありがたいです。
どのように解決するのですか?
基本的にテーブル上の索引は、本の索引のように機能します(これが名前の由来です)。
例えば、データベースに関する本で、ストレージに関する情報を探したいとします。インデックスがなければ(目次のような他の補助がないと仮定して)、トピックを見つけるまでページをひとつひとつ見ていかなければなりません(これは
full table scan
).
一方、索引にはキーワードのリストがありますから、索引を参照すると、次のようなことがわかります。
storage
は113-120,231,354ページで言及されています。そうすれば、検索せずに直接それらのページをめくることができます(これはインデックスを使った検索で、多少は早いです)。
もちろん、インデックスがどれだけ役に立つかは、いろいろなことに左右されます。
- データベースに関する本で、「データベース」という単語を索引付けした場合、1~59ページ、61~290ページ、292~400ページで言及されていることがわかると思います。このような場合、索引はあまり役に立たず、1ページずつ見ていった方が早いかもしれません(データベースでは、これは "選択性が悪い"です)。
- 10ページの本の場合、索引を作る意味がありません。10ページの本の前に5ページの索引が付くことになりかねず、それは単なるバカです。10ページをスキャンして終わりにしましょう。
- 例えば、1ページあたりの「L」の出現頻度を示すような索引は、一般に意味がない。
関連
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
PostMan レポート エラー: 接続 ECONNREFUSED 127.0.0.1:port number
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLでデータベースやテーブルのインデックスを見るには?
-
[解決済み】マルチインデックスとマルチカラムインデックスの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLによる既存テーブルのパーティショニングの実装
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
Mysql がエラー 1241 を報告 オペランドは 1 つのカラムを含む必要があります。
-
MySQLの起動エラー:ERROR 2003 (HY000)。localhost'上のMySQLサーバーに接続できない(10061)
-
[解決済み] どのトランザクションが「テーブルメタデータのロック待ち」状態を引き起こしているかを確認するにはどうすればよいですか?
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?