DBの知識がまだまだなので勉強中。
Webエンジニアのための データベース技術[実践]入門 (Software Design plus) 新品価格 |
この本を参考にしながら勉強をしていて、
インデックスについてやっと理解できてきたのでまとめてみる。
1.インデックスとは
早く検索したいんです。
そこで使うのがインデックス。
よくいわれるようにインデックスというのは本でいうとこ”索引”。
つまり、インデックスを追加する、
というのは”索引ページを追加する”てこと。
本の索引ページでは、
キーワードとそのキーワードが載っているページが記されています。
インデックスでもイメージ的にはおんなじ。
キー値とそのキー値がファイルのなんバイト目から始まるか記されています。
(キー値とバイト位置がセットになっている、てこと)
当然ながら、
本体のデータを追加するとインデックスを別途更新する処理がふえるので、
データ更新のコストは増えます。
でも検索は劇的にはやくなる。
てなわけでインデックスを定義すると早い。
2.インデックスの種類について
そんなわけでインデックスを導入するわけですが、
インデックスの種類にもいろいろある。
RDBMSで導入されているのは”B+Treeインデックス”。
(事実上のデファクトスタンダードだそうな。)
ほかにもハッシュインデックスやらいろいろ。
適切なインデックスを導入することで応答時間がかわる。
それぞれのインデックスの説明はこちらが参考になった。
インデックスの基礎知識 http://www.hi-ho.ne.jp/tsumiki/doc_1.html
3.更新コストを削減する
前述したようにインデックスを導入すると更新コストがあがる。
そこでDB製品ではさまざまな実装をしている。
(B+Treeインデックスを例にとる)
更新された情報をメモリや専用ファイルなどに、
一時的に記録しておいてあとでまとめて一気にリーフブロックを更新する、
という仕組み。
MySQL(InnoDB)で導入されている。
インデックスについてはまだまだ奥が深いけど、
まえより理解がふかまった気がする。
あと、この本、けっこう賛否両論でいろいろいわれてるけど、
僕くらいの大学でDB勉強してそれ以来あんまり、、、
て人にはちょうどいいと思う。
なんで、新卒のWebエンジニアとかDBエンジニアにはおすすめ。