Yuki猫のおうち

気ままに自由に日々を生きる

インデックスと複合インデックスのうまい使い方

dbの検索高速化

大量のデータがあるデータベースには、select文の実行速度を上げるためにインデックスを作成することが多い。
最近データベースを勉強していて、複合インデックスなるものの存在を初めて知ったので詳しく調べてみることにした。

以下のサイトがとてもわかりやすくまとめてあったと思う。

qiita.com

use-the-index-luke.com

このサイトはもう一歩くらい踏み込んでいて、読んでいて面白かった。

nippondanji.blogspot.jp

学んだこと

  • 複合indexは左側に定義したものから順番にしか使えない
    • 一つでも多くのクエリがindexを利用できるように指定するカラムの順番を熟慮する
  • mysqlのindexはデフォルトではB-Treeで作成される
  • mysqlでは、一つのクエリで使えるindexは一つだけ
  • データの更新がある度にB-Treeが更新される
    • indexが大量にあると、更新するB-Treeが大量になるため一部のクエリが遅くなる
    • データが大量にある場合、B-Treeも巨大になるため一部のクエリが遅くなる

結論

何でもかんでもとりあえずindexを貼っておけばいいというものではないのだなぁ。

あと、mysqlの公式ドキュメントが結構読みやすかったので、ぼちぼち読んでいこうと思う。