Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Indexの種類
Search
patorash
January 25, 2020
Technology
850
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Indexの種類
データベースのIndexの種類について、代表的なものについて整理しました。
patorash
January 25, 2020
More Decks by patorash
See All by patorash
中間管理職はそこそこ楽しい
patorash
0
60
情報共有戦略と戦術
patorash
1
1.4k
exists?で起きるN+1問題にSetで対処する
patorash
0
880
DBのメタデータを管理する文化を作る
patorash
0
720
Stimulusのススメ
patorash
0
100
ActiveRecordの速度改善Tips2020冬
patorash
0
100
わかった気になる!OpenID Connect
patorash
2
2.2k
Start-SQLの紹介
patorash
0
790
RailsアプリにGraphQLを導入してみた話
patorash
1
720
Other Decks in Technology
See All in Technology
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
120
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
170
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
190
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
Running Kotlin + Quarkus with Lambda
nealle
1
3.7k
Classmethod Company Deck
satoshi7
1
690
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
Rust で関数型ドメインモデリング
takonda
0
140
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
580
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Believing is Seeing
oripsolob
1
240
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Mind Mapping
helmedeiros
1
400
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Design in an AI World
tapps
1
350
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Become a Pro
speakerdeck
PRO
31
6.3k
Making the Leap to Tech Lead
cromwellryan
135
10k
Transcript
インデックスの種類 2020-01-25 第28回 中国地方DB勉強会 @patorash 1
自己紹介 名前:尾古 豊明(おこ とよあき) twitter: @patorash 所属:株式会社リゾーム システム開発部 役職:専門職 仕事内容:
ショッピングセンターに関連するサービス開発 Ruby on Railsで自社サービスの開発・運用(7年目) データベースについて詳しくなりたい。OSS-DB Silver取得済み。 現在、データベーススペシャリスト試験に向けて勉強中 2
OSS-DB Silverを受けた頃のワイ 3 よくわからんけど普通に使うのB-Tree Indexだけじゃない? B-Tree Index理解しとけばいいや。 よし、Index完全に理解した。
データベーススペシャリストの勉強をしてるワイ 4 まったくわからない。 俺は雰囲気でIndexを使っている。
Indexについて整理 5
Indexの種類 • B-tree Index • Bitmap Index • Hash Index
• その他(GiSTとか)※今回は取り上げない 6
B-tree Index • PostgreSQLのデフォルトのIndex • MySQLはストレージエンジンによって デフォルトは異なるが、 Inno DBだと デフォルトのIndex
• 木構造で作られる • BはBalanced • カーディナリティ(選択性)が 高い列に有効 • カーディナリティが低い列だと フルスキャンが発生する • 範囲検索でも使える 31 17 20 35 42 10 15 32 33 37 39 50 52 18 19 25 30 ※EXAM PRESS うかる!データベーススペシャリスト より抜粋 7
Bitmap Index • Bitmap形式のIndex ◦ 0と1で表現 • カーディナリティの低い場合に有効 ◦ 性別、権限、カテゴリー等の種類の少ない
ケースのこと • PostgreSQLの場合、明示的にこの Indexを 指定することはできないが、実行時に Bitmapを作成し、それを使ってスキャンする ことがある ◦ Bitmapの作成にコストがかかるが、 それでもフルスキャンに比べるとマシ というケースで発動 8 性別 権限 浜田 男 管理者 松本 男 編集者 今田 男 ゲスト 東野 男 編集者 板尾 男 管理者 蔵野 男 ゲスト 篠原 女 編集者 YOU 女 ゲスト
Bitmap Index • Bitmap形式のIndex ◦ 0と1で表現 • カーディナリティの低い場合に有効 ◦ 性別、権限、カテゴリー等の種類の少ない
ケースのこと • PostgreSQLの場合、明示的にこの Indexを 指定することはできないが、実行時に Bitmapを作成し、それを使ってスキャンする ことがある ◦ Bitmapの作成にコストがかかるが、 それでもフルスキャンに比べるとマシ というケースで発動 9 男性 女性 管理者 編集者 ゲスト 浜田 1 0 1 0 0 松本 1 0 0 1 0 今田 1 0 0 0 1 東野 1 0 0 1 0 板尾 1 0 1 0 0 蔵野 1 0 0 0 1 篠原 0 1 0 1 0 YOU 0 1 0 0 1
Bitmap Index • Bitmap形式のIndex ◦ 0と1で表現 • カーディナリティの低い場合に有効 ◦ 性別、権限、カテゴリー等の種類の少ない
ケースのこと • PostgreSQLの場合、明示的にこの Indexを 指定することはできないが、実行時に Bitmapを作成し、それを使ってスキャンする ことがある ◦ Bitmapの作成にコストがかかるが、 それでもフルスキャンに比べるとマシ というケースで発動 • 男で管理者、という条件にしたら、浜田と板 尾がすぐに浮かび上がる 10 男性 女性 管理者 編集者 ゲスト 浜田 1 0 1 0 0 松本 1 0 0 1 0 今田 1 0 0 0 1 東野 1 0 0 1 0 板尾 1 0 1 0 0 蔵野 1 0 0 0 1 篠原 0 1 0 1 0 YOU 0 1 0 0 1
Hash Index • 値のHash値を作るIndex • 完全一致の際に効果的 • 範囲検索はできない • Indexの物理量の増え方が一定になる
• PostgreSQLでは使えるが非推奨 ◦ WALに書き込めない ◦ ストリーミングレプリケーションで 使えない 11 メールアドレス Hash値 浜田
[email protected]
723E7 松本
[email protected]
83AB4 今田
[email protected]
15D1C 東野
[email protected]
9AB2F 板尾
[email protected]
699FE 蔵野
[email protected]
1DAF8 篠原
[email protected]
3E783 YOU
[email protected]
AB415
OSS-DB Silverを受けた頃のワイ 12 よくわからんけど普通に使うのB-Tree Indexだけじゃない? B-Tree Index理解しとけばいいや。 よし、Index完全に理解した。
PostgreSQL10でHash Indexが強化! 13
Hash Index • 値のHash値を作るIndex • 完全一致の際に効果的 • 範囲検索はできない • Indexの物理量の増え方が一定になる
• PostgreSQL 9.xでは使えるが非推奨 ◦ WALに書き込めない ◦ ストリーミングレプリケーションで 使えない • PostgreSQL 10以上で使える! ◦ WALに書き込める! ◦ ストリーミングレプリケーションで 使える! 14 メールアドレス Hash値 浜田
[email protected]
723E7 松本
[email protected]
83AB4 今田
[email protected]
15D1C 東野
[email protected]
9AB2F 板尾
[email protected]
699FE 蔵野
[email protected]
1DAF8 篠原
[email protected]
3E783 YOU
[email protected]
AB415
Hash Indexを試してみた • データ1万件程度 • ユニーク制約のついた列 • 完全一致で利用 • B-Tree
Indexと速度面・データ量で比較 15
結果 • 検索速度はB-Tree Indexと、ほぼ変わらず • 実行計画では、Hash Indexでは若干コストが低い • Indexのデータ量も1万件程度だと、ほぼ変わらず ◦
行数が増えるとHash Indexのほうがデータ量的に少なくて済んだという記事を見た (@nuko_yokohamaさんの記事) ◦ 1000万行入れた時のデータについて。 ◦ https://qiita.com/nuko_yokohama/items/05ece8313af0f81a870d 16
まとめ B-Tree Indexを使っておけば、基本は大丈夫。 Bitmap Index はクエリ実行時に自動で作られる。(B-Tree Indexは必要) Hash Indexは(ほぼ)ユニークで完全一致のケースならば有効。 使ってみてはいかがでしょうか?(ただし、PostgreSQL
10以上) 適用できそうな例: • メールアドレス • 電話番号 • ユーザーコード • 認証系 • アクセスキー • アクセスシークレット 他にありそうな例があったら教えてください! 17