1. ホーム
  2. mysql

[解決済み] 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」の出現頻度を示すような索引は、一般に意味がない。