MySQL インデックスはどのように機能しますか? 質問する

MySQL インデックスはどのように機能しますか? 質問する

MySQL インデックスがどのように機能するか、具体的には、テーブル全体をスキャンせずに要求されたデータを返す方法に非常に興味があります。

話がそれるのは承知していますが、これを詳しく説明していただける方がいらっしゃいましたら、大変ありがたく思います。

ベストアンサー1

基本的に、表のインデックスは本のインデックスのように機能します (これが名前の由来です)。

たとえば、データベースに関する本があり、ストレージなどに関する情報を見つけたいとします。索引がなければ (目次などの他の補助がないと仮定)、トピックが見つかるまでページを 1 つずつたどる必要があります (これは ですfull table scan)。一方、索引にはキーワードのリストがあるため、索引を参照すると、 がstorage113 ~ 120、231、354 ページで言及されていることがわかります。その後、検索せずにそれらのページに直接移動できます (これは索引を使用した検索で、やや高速です)。

もちろん、インデックスがどれだけ役に立つかは、さまざまな要因に依存します。上記の例を使用して、いくつか例を挙げます。

  • データベースに関する本があり、「データベース」という単語に索引を付けると、その単語が 1 ~ 59 ページ、61 ~ 290 ページ、および 292 ~ 400 ページに記述されていることがわかります。このような場合、索引はあまり役に立たず、ページを 1 つずつ確認する方が速い場合があります (データベースでは、これは「選択性が低い」ことになります)。
  • 10 ページの本の場合、索引を作成しても意味がありません。10 ページの本の先頭に 5 ページの索引が付くだけになってしまう可能性があるからです。これは愚かなことです。10 ページをざっと読み、それで終わりにしましょう。
  • 索引も有用である必要があります。たとえば、ページごとの文字「L」の頻度を索引付けする意味は通常ありません。

おすすめ記事