読者です 読者をやめる 読者になる 読者になる

masayuki5160's diary

名古屋でWeb系を中心にエンジニアしてます

新卒のWebエンジニアとかDBエンジニアへオススメする、Webエンジニアのための データベース技術[実践]入門

MySQL DB

DBの知識がまだまだなので勉強中。

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

新品価格
¥2,786から
(2017/3/19 15:32時点)

この本を参考にしながら勉強をしていて、
インデックスについてやっと理解できてきたのでまとめてみる。



1.インデックスとは
早く検索したいんです。
そこで使うのがインデックス。

よくいわれるようにインデックスというのは本でいうとこ”索引”。
つまり、インデックスを追加する、
というのは”索引ページを追加する”てこと。

本の索引ページでは、
キーワードとそのキーワードが載っているページが記されています。
インデックスでもイメージ的にはおんなじ。
キー値とそのキー値がファイルのなんバイト目から始まるか記されています。
(キー値とバイト位置がセットになっている、てこと)

当然ながら、
本体のデータを追加するとインデックスを別途更新する処理がふえるので、
データ更新のコストは増えます。
でも検索は劇的にはやくなる。

てなわけでインデックスを定義すると早い。

2.インデックスの種類について
そんなわけでインデックスを導入するわけですが、
インデックスの種類にもいろいろある。

RDBMSで導入されているのは”B+Treeインデックス”。
(事実上のデファクトスタンダードだそうな。)
ほかにもハッシュインデックスやらいろいろ。
適切なインデックスを導入することで応答時間がかわる。

それぞれのインデックスの説明はこちらが参考になった。

インデックスの基礎知識 http://www.hi-ho.ne.jp/tsumiki/doc_1.html


3.更新コストを削減する
前述したようにインデックスを導入すると更新コストがあがる。


そこでDB製品ではさまざまな実装をしている。
(B+Treeインデックスを例にとる)

更新された情報をメモリや専用ファイルなどに、
一時的に記録しておいてあとでまとめて一気にリーフブロックを更新する、
という仕組み。
MySQL(InnoDB)で導入されている。






インデックスについてはまだまだ奥が深いけど、
まえより理解がふかまった気がする。
あと、この本、けっこう賛否両論でいろいろいわれてるけど、
僕くらいの大学でDB勉強してそれ以来あんまり、、、
て人にはちょうどいいと思う。

なんで、新卒のWebエンジニアとかDBエンジニアにはおすすめ。