インデックスのおはなし

25
インデックスのおはなし @hajikami 2013/02/16 俺聞け4

Upload: hajikami

Post on 02-Jul-2015

1.105 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: インデックスのおはなし

インデックスのおはなし

@hajikami

2013/02/16 俺聞け4

Page 2: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

2目次1.自己紹介

2.このセッションについて

3.データベースってなに?

4.インデックスってなに?

5.インデックスをメンテナンスしよう!

6.まとめ

Page 3: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

3自己紹介● @hajikami

● 基幹業務系プログラマ– SIer に勤務– 業務: C, C#, etc...– 好きな言語:

PHP, Python, Haskell, ScalaEnglish, français, italiano, 國語, etc...

Page 4: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

4このセッションについて

このセッションではデータベースのインデックスについて

基礎的な知識をお話しします

Page 5: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

5このセッションについて

このセッションでは「データベース(DB)」という言葉を「関係データベース管理システム(RDBMS)」と

同じ意味で用います

Page 6: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

6このセッションの楽しみ方● IT 開発・保守・運用をされない方

● データベースとは何か、のんびりと聞いてみてください

● DBをちょっと使うけど、インデックスはどうもよくわからない方● インデックスのメリット・デメリットについてお話します

● なぜインデックスのメンテナンスが必要かよくわからない方● インデックスメンテナンスのイメージについてお話します

● 上記をすべて理解する方● おいしいお菓子をお召し上がり下さい

Page 7: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

7データベースってなに?

データを保存・管理するものです

Page 8: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

8データベースってなに?● システムは大きく「データ」と「処理」に分けられます● データ: データベースが主担当

● 投稿文章● 写真● コメント

● 処理: アプリケーションが主担当● 投稿文章を表示する● 投稿文章に紐づく写真・コメントを表示する

Page 9: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

9データベースってなに?

パソコン アプリケーション データベース

例: SNS で投稿を見る

投稿見せて!

投稿のデータちょうだい!

はい!これだよ!

見やすくしといたよ!

Page 10: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

10まとめ

データベースとはデータを保存・管理するものです

Page 11: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

11インデックスってなに?

データを見つけやすくするためのものです

Page 12: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

12インデックスってなに?● データを見つけやすくするためのもの● 日本語では索引

● 「インデックス」「索引」● バインダーにファイルを綴るときに貼るもの● 本の末尾に付いているキーワード一覧

これらがあれば探しやすいですよね!

Page 13: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

13インデックスのメリット● データを見つけるのが早くなります!

● 例: 建造物について書かれた500ページの本から「サグラダ・ファミリア」について書かれたページを見つける● 建造物名「アイウエオ」索引あり: サの項目を調べる ● 索引なし: 全建造物名を調べる

Page 14: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

14インデックスが使えないこともある● 例えば、後方一致検索では使えません

● 例: 建造物について書かれた500ページの本から「(なんとか)ファミリア」について書かれたページを見つける● 建造物名「アイウエオ」索引あり:

→建造物名の末尾しかわからないので索引が使えない→全建造物名を調べる

Page 15: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

15インデックスのデメリット● データを変えるのが遅くなります

● 新しくインデックスを作るときは計画的に!

● 例: 建造物について書かれた500ページの本に「落水荘」について書かれたページを追加する● 建造物名「アイウエオ」索引: 落水荘 追加● 設計者「アイウエオ」索引: フランク・ロイド・ライト 追加● 所在地「アイウエオ」索引: アメリカ 追加

Page 16: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

16まとめ

インデックスとはデータを見つけやすくするためのものです

ただし、インデックスを多く作成するとデータを入れるときに時間がかかります

Page 17: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

17インデックスをメンテナンスしよう!

どうやってインデックスをメンテナンスするの?インデックスのメンテナンスはなぜ必要?

Page 18: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

18インデックスのメンテナンス方法● 以下の命令により、インデックスを再構築します

● MySQL– OPTIMIZE TABLE テーブル名

● PostgreSQL– REINDEX INDEX インデックス名 等

● Oracle– ALTER INDEX インデックス名 REBUILD– ALTER INDEX インデックス名 COALESCE (簡易メンテナンス)

※検索・更新に大きな影響が出るため、 メンテナンス時はシステムを止めて実施しましょう (回避策がある場合もあります)

Page 19: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

19インデックスのイメージ

一般に B-Tree インデックスが使われていますB-Tree を図示することができますか?

Page 20: インデックスのおはなし

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以降

Page 21: インデックスのおはなし

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より前

Page 22: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

22インデックスのメンテナンスとは● B-Tree をこの状態に近づけること

● 綺麗なインデックスは、検索も早い

A

H

GFE

D

CB I J

L

KDより前 D以降

Hより前

M N OH以降Lより前

L以降

Page 23: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

23全まとめ● データベースはメンテナンスが必要です

● 使っているうちにゴチャゴチャしてくる● 作りっぱなしはダメ、絶対

● インデックスのご利用は計画的に● 検索は早くなるけど、更新が遅くなる● インデックスが使えない検索もある● (本セッションでは触れなかったが、)

インデックスを使ったほうが検索が遅くなるケースもある

Page 24: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

24おすすめ書籍● 達人に学ぶ SQL徹底指南書● 達人に学ぶDB設計 徹底指南書

● SQL, RDBMSの基礎知識を解説している

● Webエンジニアのための データベース技術[実践]入門● 超入門から運用事例まで Mobage を例に解説している

● 44のアンチパターンに学ぶDBシステム● DBに関するアンチパターンとその改善のためのヒント

(組織の改善を含む)について解説している

Page 25: インデックスのおはなし

2013/02/16 インデックスのおはなし @hajikami

25終わり

ありがとうございました!