Download - インデックスのおはなし
インデックスのおはなし
@hajikami
2013/02/16 俺聞け4
2013/02/16 インデックスのおはなし @hajikami
2目次1.自己紹介
2.このセッションについて
3.データベースってなに?
4.インデックスってなに?
5.インデックスをメンテナンスしよう!
6.まとめ
2013/02/16 インデックスのおはなし @hajikami
3自己紹介● @hajikami
● 基幹業務系プログラマ– SIer に勤務– 業務: C, C#, etc...– 好きな言語:
PHP, Python, Haskell, ScalaEnglish, français, italiano, 國語, etc...
2013/02/16 インデックスのおはなし @hajikami
4このセッションについて
このセッションではデータベースのインデックスについて
基礎的な知識をお話しします
2013/02/16 インデックスのおはなし @hajikami
5このセッションについて
このセッションでは「データベース(DB)」という言葉を「関係データベース管理システム(RDBMS)」と
同じ意味で用います
2013/02/16 インデックスのおはなし @hajikami
6このセッションの楽しみ方● IT 開発・保守・運用をされない方
● データベースとは何か、のんびりと聞いてみてください
● DBをちょっと使うけど、インデックスはどうもよくわからない方● インデックスのメリット・デメリットについてお話します
● なぜインデックスのメンテナンスが必要かよくわからない方● インデックスメンテナンスのイメージについてお話します
● 上記をすべて理解する方● おいしいお菓子をお召し上がり下さい
2013/02/16 インデックスのおはなし @hajikami
7データベースってなに?
データを保存・管理するものです
2013/02/16 インデックスのおはなし @hajikami
8データベースってなに?● システムは大きく「データ」と「処理」に分けられます● データ: データベースが主担当
● 投稿文章● 写真● コメント
● 処理: アプリケーションが主担当● 投稿文章を表示する● 投稿文章に紐づく写真・コメントを表示する
2013/02/16 インデックスのおはなし @hajikami
9データベースってなに?
パソコン アプリケーション データベース
例: SNS で投稿を見る
投稿見せて!
投稿のデータちょうだい!
はい!これだよ!
見やすくしといたよ!
2013/02/16 インデックスのおはなし @hajikami
10まとめ
データベースとはデータを保存・管理するものです
2013/02/16 インデックスのおはなし @hajikami
11インデックスってなに?
データを見つけやすくするためのものです
2013/02/16 インデックスのおはなし @hajikami
12インデックスってなに?● データを見つけやすくするためのもの● 日本語では索引
● 「インデックス」「索引」● バインダーにファイルを綴るときに貼るもの● 本の末尾に付いているキーワード一覧
これらがあれば探しやすいですよね!
2013/02/16 インデックスのおはなし @hajikami
13インデックスのメリット● データを見つけるのが早くなります!
● 例: 建造物について書かれた500ページの本から「サグラダ・ファミリア」について書かれたページを見つける● 建造物名「アイウエオ」索引あり: サの項目を調べる ● 索引なし: 全建造物名を調べる
2013/02/16 インデックスのおはなし @hajikami
14インデックスが使えないこともある● 例えば、後方一致検索では使えません
● 例: 建造物について書かれた500ページの本から「(なんとか)ファミリア」について書かれたページを見つける● 建造物名「アイウエオ」索引あり:
→建造物名の末尾しかわからないので索引が使えない→全建造物名を調べる
2013/02/16 インデックスのおはなし @hajikami
15インデックスのデメリット● データを変えるのが遅くなります
● 新しくインデックスを作るときは計画的に!
● 例: 建造物について書かれた500ページの本に「落水荘」について書かれたページを追加する● 建造物名「アイウエオ」索引: 落水荘 追加● 設計者「アイウエオ」索引: フランク・ロイド・ライト 追加● 所在地「アイウエオ」索引: アメリカ 追加
:
2013/02/16 インデックスのおはなし @hajikami
16まとめ
インデックスとはデータを見つけやすくするためのものです
ただし、インデックスを多く作成するとデータを入れるときに時間がかかります
2013/02/16 インデックスのおはなし @hajikami
17インデックスをメンテナンスしよう!
どうやってインデックスをメンテナンスするの?インデックスのメンテナンスはなぜ必要?
2013/02/16 インデックスのおはなし @hajikami
18インデックスのメンテナンス方法● 以下の命令により、インデックスを再構築します
● MySQL– OPTIMIZE TABLE テーブル名
● PostgreSQL– REINDEX INDEX インデックス名 等
● Oracle– ALTER INDEX インデックス名 REBUILD– ALTER INDEX インデックス名 COALESCE (簡易メンテナンス)
※検索・更新に大きな影響が出るため、 メンテナンス時はシステムを止めて実施しましょう (回避策がある場合もあります)
2013/02/16 インデックスのおはなし @hajikami
19インデックスのイメージ
一般に B-Tree インデックスが使われていますB-Tree を図示することができますか?
2013/02/16 インデックスのおはなし @hajikami
20インデックスのイメージ● 一般に B-Tree インデックスが使用されています
● B-Tree のイメージ
A
H
GFE
D
CB I J
L
KDより前 D以降
Hより前
M N OH以降Lより前
L以降
2013/02/16 インデックスのおはなし @hajikami
21インデックスのイメージ● 一般に B-Tree インデックスが使用されています
● 同じデータの B-Tree でも…
A
I
HFD
B
J K
L
Bより前 B以降Iより前
OH以降Lより前
L以降
CDより前
ED以降Fより前
ED以降Fより前
GF以降Hより前
M NOより前
2013/02/16 インデックスのおはなし @hajikami
22インデックスのメンテナンスとは● B-Tree をこの状態に近づけること
● 綺麗なインデックスは、検索も早い
A
H
GFE
D
CB I J
L
KDより前 D以降
Hより前
M N OH以降Lより前
L以降
2013/02/16 インデックスのおはなし @hajikami
23全まとめ● データベースはメンテナンスが必要です
● 使っているうちにゴチャゴチャしてくる● 作りっぱなしはダメ、絶対
● インデックスのご利用は計画的に● 検索は早くなるけど、更新が遅くなる● インデックスが使えない検索もある● (本セッションでは触れなかったが、)
インデックスを使ったほうが検索が遅くなるケースもある
2013/02/16 インデックスのおはなし @hajikami
24おすすめ書籍● 達人に学ぶ SQL徹底指南書● 達人に学ぶDB設計 徹底指南書
● SQL, RDBMSの基礎知識を解説している
● Webエンジニアのための データベース技術[実践]入門● 超入門から運用事例まで Mobage を例に解説している
● 44のアンチパターンに学ぶDBシステム● DBに関するアンチパターンとその改善のためのヒント
(組織の改善を含む)について解説している
2013/02/16 インデックスのおはなし @hajikami
25終わり
ありがとうございました!