MySQL
oracle
Database

DBのインデックスについて調べてまとめた

初手参考資料

  1. use the index
  2. MySQLのIndexをはるコツ
  3. mysqlのコスト計算アルゴリズム

学んだプロセスとしては、2に軽く目を通しておき、
1で全体を学んだ後に2をもう一度見直すといった形。
3は補足で使用。

しらべた結果

「インデックス」には種類があった

  • B-treeインデックス
    • カーディナリティの低い列に対して有効
    • いわゆる「インデックス」
  • ビットマップインデックス
    • カーディナリティの高い列に対して有効
    • 事前にSQL文が分かっていて適切なマルチカラムのB-treeインデックスを作ればあまり必要ではない
    • insertやupdate、deleteのスケーラビリティがとんでもなく悪い
    • 同時書き込みは実質的に不可能
    • WEBアプリケーションには不向き

B-treeインデックスとビットマップインデックス

B-treeインデックス

所感

調べ始める前は、単純なデータ量とカラムのカーディナリティの高低くらい分かっていれば、
ある程度作れるのかなーくらいの認識だったが、意外と保守運用面での重要性があることを理解した。
呼び出し側(SQL)の要件も考慮するとなると、めちゃくちゃ大変な気がしてくる。

用語

コマンド備忘

-- indexテーブルの確認
mysql> show index from {table};
-- 直前のクエリのコスト確認
mysql> show status like 'last_query_cost';

fin.