LoginSignup
0
1

More than 1 year has passed since last update.

SQLのインデックスの仕組みについて

Posted at

今までカラムにインデックスを盲目的に貼っているだけだったが、ひょんなことからその仕組みが気になったのでまとめた

インデックスとは

ググってみて出てきたもの

インデックスとは、データの検索速度を向上させるために、どの行がどこにあるかを示した索引のこと
 うーん😔 わかりにくい

実際に何やってるの??

あるカラムに対して、辞書順、数値順にデータを整理している

整理前のDB
スクリーンショット 2021-09-18 21.16.44.png

整理後のDB(nameにインデックスを貼った)
スクリーンショット 2021-09-18 21.17.01.png

nameが辞書順になっている!

気になったこと

辞書順になっててももし極端な話zから始まるものを探そうとしたらO(N)かかってしまい、Nによってはパフォーマンスが悪くなるのでは??

気になったことへの解決

結論 インデックスを貼られたカラムのデータ構造はBTree もしくはB+Tree構造になっており、探索にかかる計算量はO(logN)になりかなり計算スピードが抑えられる!!

Btreeとは??

このような木の構造をしているデータ構造のこと 木構造についてはこちら
20200512105138.png

探索の際にまず中央の数字を見て、その数より検索対象の数が大きければ右の木に、小さければ左の木にとどんどん検索対象を小さくできる。よってデータ構造をBTreeやB+Treeにしておけば、計算量がO(logN)とかなり抑えられ、非常に効率的に探索できるようになるというわけ

補足 BtreeとB+Treeの違い

  • B+Treeは末端の場所(リーフノードと言います)に全ての要素が集結している。ので範囲検索が早い

  • また、リーフノード以外のノードはデータの実態を持っておらず実際のデータを持っているのは末端のリーフノードのみという違いがある。

MongoDBはBtreeを採用しており、MySQLのinnnerDBはB+Treeを採用しているという違いもある

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1