😕

[MySQL] インデックスはテーブルの参照ではない

インデックスの理解が間違っていたのでメモ


インデックスはよく索引にたとえられるので,インデックスを使う=インデックスを経由してテーブルを参照することだと思っていたのだけど,実はそうではないらしく.

実際は,インデックスはテーブルの値を保持していて,テーブルを参照することなく結果を返しているのだそう (クエリによってそうでない場合もあるが).

たとえばクラスタインデックスでは,B+ tree の葉ノードにそれぞれ全カラムの値が格納されていて, Primary Key 指定で値を取得する場合は,インデックスを参照するだけで結果を返せる (テーブルを参照していない).


MySQL のインデックスを索引にたとえるのはちょっとミスリードだなと思った 🤔

インデックスをなんとなくの理解で使い続けてしまったのがよくなかった.言語化できるところまで理解を深めるようにする.

Ref.