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