Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

作って理解する RDBMSのしくみ

ydah
October 19, 2024

作って理解する RDBMSのしくみ

Kaigi on Rails 2024「作って理解する RDBMSのしくみ」の発表スライド。
#kaigionrails https://kaigionrails.org/2024/talks/ydah/

ydah

October 19, 2024
Tweet

More Decks by ydah

Other Decks in Technology

Transcript

  1. © 2024 ANDPAD All Rights Reserved. 1 作って理解する RDBMSのしくみ 2024/10/26

    Kaigi on Rails 2024 @ydah 株式会社アンドパッド 開発本部 SWE
  2. Confidential © 2024 ANDPAD All Rights Reserved. 2 About me

    Yudai Takada https://ydah.net X: @ydah_ GitHub: @ydah Kyobashi.rb Co-Founder ऴ·ͰҿΊ͹ #rubyfamily
  3. Confidential © 2024 ANDPAD All Rights Reserved. 6 WORLD TOUR

    2024🤘 🇯🇵 2024.05.17 (Naha) RubyKaigi 2024 🇯🇵 2024.08.24 (Osaka) OsakaRubyKaigi04 (Organizing) 🌏 2024.08.31 (ONLINE) RubyKaigi 2024 followup 🇧🇦 2024.09.13 (Sarajevo) EuRuKo 2024 🇯🇵 2024.10.26 (Tokyo) Kaigi on Rails 2024 🇯🇵 2024.12.05 (Matsue) RubyWorld Conference2024
  4. © 2024 ANDPAD All Rights Reserved. 現場の効率化から経営改善まで一元管理できる クラウド型建設プロジェクト管理サービス 社 内 社 外

    営業 / 監督 / 設計 事務 / 管理職 職人 / 業者 メーカー / 流通 案件管理 資料 工程表 写真 報告 チャット 黒板 図面 受発注 •ɹ•ɹ• 8 ANDPADとは
  5. Confidential © 2024 ANDPAD All Rights Reserved. Q 1 RDBMS

    のしくみについて話します RDBMS のしくみを理解してよりRDBMS を使いこなすためのヒントを持って 帰っていただくのが本トークのゴールです。使いこなしていくぞ〜 Kaigi on Railsですが、RubyもRailsの話も全くないです 作っているRDBMSのリポジトリは公開予定です Q 2 Q 3 実装もZigで実装しています。なので、RubyやRailsの話は全くありません! 曰く、「今回最も議論を巻き起こしたプロポーザル」@amatsuda「トランプ のジョーカー」 公開も合わせてするぞ!と思っていたのですが、夏休みの宿題を最終日の深 夜から始めるタイプの人間でして。スライドって終わらないですね.....はい..... 公開したらTwitter(現X)で呟くのでフォローしてお待ちください。 10 本日のトークについて
  6. © 2024 ANDPAD All Rights Reserved. 11 本日のトークについて ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works ◯ 話すこと •RDBMSの全体像について •一般的なアーキテクチャ •データ構造とアルゴリズム •どのように動いているか × 話さないこと 話すこと 話さないこと •RDBMS のつくりかたについて •細かいコードや実装のはなし •特定のRDBMSのはなし •使い方や最適化のテクニック
  7. © 2024 ANDPAD All Rights Reserved. 01 12 RDBMSの全体像 理解の枠組みを養成する

    ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  8. © 2024 ANDPAD All Rights Reserved. 13 一般的なアーキテクチャ 構文解析器 クエリエクスキュータ

    バッファプールマネージャ ディスクマネージャ クライアント データファイル プランナ/オプティマイザ ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  9. © 2024 ANDPAD All Rights Reserved. 14 構文解析器 プランナ/オプティマイザ クエリエクスキュータ

    バッファプールマネージャ ディスクマネージャ クライアント データファイル ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 構文解析器
  10. © 2024 ANDPAD All Rights Reserved. 15 構文解析器 クエリを解析しAST(抽象構文木)に変換する クライアントから送られたクエリは、構文解析器(パーサー)が解析し

    てAST(抽象構文木)を生成する。 解析には字句解析と構文解析という2つの解析がある。 •字句解析:バイト列を意味ある単位でトークンに変換する •構文解析:字句解析から受け取ったトークン列が、      文法的に正しいかを検査してASTを作成する ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  11. © 2024 ANDPAD All Rights Reserved. 16 字句解析 バイト列を意味のある単位でトークンに変換する SELECT

    * FROM tbl1 WHERE id = 123 AND num > 456; ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  12. © 2024 ANDPAD All Rights Reserved. 17 字句解析 バイト列を意味のある単位でトークンに変換する SELECT

    * FROM tbl1 WHERE id = 123 AND num > 456; ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works SELECT * FROM tbl1 ...
  13. © 2024 ANDPAD All Rights Reserved. 18 構文解析 字句解析から受け取ったトークン列が 文法的に正しいかを検査してAST(抽象構文木)を作成する

    SELECT * FROM tbl1 WHERE id = 123 AND num > 456; ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works SELECT * FROM tbl1 ... <Query> <SFW> SELECT <SelList> <Attribute> * FROM <FromList> WHERE <RelName> tbl1 <Condition> AND <Condition> <Attribute> = <Attribute> id 123
  14. © 2024 ANDPAD All Rights Reserved. 19 構文解析器 プランナ/オプティマイザ クエリエクスキュータ

    バッファプールマネージャ ディスクマネージャ クライアント データファイル ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works プランナ/オプティマイザ
  15. © 2024 ANDPAD All Rights Reserved. 20 プランナ/オプティマイザ クエリの実行計画を立てる プランナ/オプティマイザはAST(抽象構文木)を元に、最適なクエリ

    の実行計画を立てる。 アクセス経路や、インデックスの有無などのパラメーターから、コ ストの低いクエリを計画する。 •実行計画:クエリを処理・実行する際の最適な手順を示した計画 ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  16. © 2024 ANDPAD All Rights Reserved. 21 プランナ/オプティマイザ SQLのEXPLAIN文で確認可能 ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works EXPLAIN SELECT * FROM use r s WHERE id = 1 + - - - - + - - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - - + | id | select_type | table | pa r titions | type | possible_keys | key | key_len | r ef | r ows | f i lte r ed | Ext r a | + - - - - + - - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - - + | 1 | SIMPLE | use r s | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL | + - - - - + - - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - - +
  17. © 2024 ANDPAD All Rights Reserved. 22 構文解析器 クエリエクスキュータ バッファプールマネージャ

    ディスクマネージャ クライアント データファイル プランナ/オプティマイザ ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works クエリエクスキュータ
  18. © 2024 ANDPAD All Rights Reserved. 23 クエリエクスキュータ 実行計画通りにデータにアクセスする プランナやオプティマイザによって生成された実行計画を受け取っ

    て、その実行計画に従って必要な操作を実行する。 ディスク上のデータ構造にアクセスするアルゴリズムに基づいて結 果を返す。 •実行計画通りにデータの検索・追加・削除などの操作を行う ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  19. © 2024 ANDPAD All Rights Reserved. 24 構文解析器 クエリエクスキュータ バッファプールマネージャ

    ディスクマネージャ クライアント データファイル プランナ/オプティマイザ ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works バッファプールマネージャ
  20. © 2024 ANDPAD All Rights Reserved. 25 バッファプールマネージャ メモリ上でのキャッシュ管理とページ置換を行い、 ディスクアクセスを減らす

    一般的にディスクI/Oが多いと遅くなる。 データベースの主メモリ内にあるバッファプール(キャッシュ領 域)を管理し、ディスクへの直接アクセスを減らすことで、ディス クI/Oを最適化する役割を担う。 •メモリ内データキャッシュの管理を担う ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  21. © 2024 ANDPAD All Rights Reserved. 26 LRU (Least Recently

    Used) キャッシュがいっぱいになった時に 最も長い時間アクセスされていない要素を削除する戦略 LRU(Least Recently Used)は最低使用頻度の頭字語。 記憶域を管理するための一般的な方法で、 時間的局所性に基づいて キャッシュを更新するアルゴリズムです。 ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page6 page1 新しいサブリスト 古いサブリスト 右に行くほど使われていなくて古いページ
  22. © 2024 ANDPAD All Rights Reserved. 27 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page6 page1 右に行くほど使われていなくて古いページ 最も昔にアクセスされたページ 連結リストを使用して、アクセスの時系列を表現する LRU (Least Recently Used)
  23. © 2024 ANDPAD All Rights Reserved. 28 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page6 page1 右に行くほど使われていなくて古いページ 最も昔にアクセスされたページ page6にアクセスが発生すると移動する LRU (Least Recently Used)
  24. © 2024 ANDPAD All Rights Reserved. 29 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page6 page1 右に行くほど使われていなくて古いページ 最も昔にアクセスされたページ page2が最も昔にアクセスされたページになる LRU (Least Recently Used)
  25. © 2024 ANDPAD All Rights Reserved. 30 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page1 右に行くほど使われていなくて古いページ 最も昔にアクセスされたページ キャッシュに新たなページのpage7を追加すると page6 page7 LRU (Least Recently Used)
  26. © 2024 ANDPAD All Rights Reserved. 31 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works page3 page5 page4 page2 page1 右に行くほど使われていなくて古いページ 最も昔にアクセスされたページ キャッシュがいっぱいなので、最も古いページのpage2を削除する page6 page7 LRU (Least Recently Used)
  27. © 2024 ANDPAD All Rights Reserved. 32 RDBMSの一般的なアーキテクチャ 構文解析器 クエリエクスキュータ

    バッファプールマネージャ ディスクマネージャ クライアント データファイル プランナ/オプティマイザ ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  28. © 2024 ANDPAD All Rights Reserved. 33 ディスクマネージャ ディスク上のデータの物理的な読み書きを管理する バッファプールマネージャと連携してディスク上のデータの永続化

    と物理的なディスクI/Oの最適化を担当する。 データの整合性と耐久性を保証する。 •ディスクへのデータ操作を管理する ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  29. © 2024 ANDPAD All Rights Reserved. 02 34 データ構造とアルゴリズム Algorithms

    + Data Structures = Programs ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  30. © 2024 ANDPAD All Rights Reserved. 35 データファイルの構造 データファイルの構造3種別 ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works データがインデックス構造そのものに格納される。データがインデックスと一緒に 管理され、検索が効率的です。頻繁な検索と主キーアクセスに適している。 ヒープファイル データが特定の順番にソートされることなく挿入順に格納される。検索は難しく、 特定の基準で並び替えるインデックスを別途作成する必要がある。 ハッシュファイル データがハッシュ関数に基づいて格納される。特定のキーに対する高速なアクセス が求められる場合に適している。 インデックス構成表 01 02 03
  31. © 2024 ANDPAD All Rights Reserved. 36 データファイルの構造 データファイルの構造3種別 ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works Heap-Organized Tables データがハッシュ関数に基づいて格納される。特定のキーに対する高速なアクセス が求められる場合に適している。 02 02 インデックス構成表 ヒープファイル 01 ハッシュファイル 03 データが特定の順番にソートされることなく挿入順に格納される。検索は難しく、 特定の基準で並び替えるインデックスを別途作成する必要がある。 データがインデックス構造そのものに格納される。データがインデックスと一緒に 管理され、検索が効率的です。頻繁な検索と主キーアクセスに適している。
  32. © 2024 ANDPAD All Rights Reserved. 37 インデックスがないとどうなるか? 線形探索する必要があり計算量も O(n)

    ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 名前 Alice Dave Olivia Frank : Rupert Craig Ydah Michael Eve : 格納されたデータに順次アク セスをして探す必要がある
  33. © 2024 ANDPAD All Rights Reserved. 38 インデックスがあるとどうなるか? ルールごとに並べ替えが可能になる ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works キーの値 Alice Craig Dave Eve : Olivia Rupert Ydah Frank Michael * * * * : * * * * * 名前 Alice Dave Olivia Frank : Rupert Craig Ydah Michael Eve 年齢 24 76 30 12 : 102 87 32 8 55 キーの値 8 12 24 30 : 76 87 102 32 55 * * * * : * * * * *
  34. © 2024 ANDPAD All Rights Reserved. 39 インデックスの種類 ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 01 B-tree 一般的な構造で、データを階層的なツリー構造で管理する。データが昇順または降 順に格納される。等価検索や範囲検索に適しています。 Hash データをハッシュ関数を使用してマッピングする。主に長い文字列データの等価検 索に最適で、高速な検索が可能。ただし、範囲検索には向いていない。 GIN 多対多の関係を持つデータや複数の要素を持つデータの検索に適している。配列や JSON、テキストの要素検索に対して優れたパフォーマンスを発揮する。 GiST / SP-GiST さまざまなデータ型や演算子に対応可能。テキスト検索や、範囲データ・空間デー タ(地理情報など)や類似検索に適している。 02 03 04
  35. © 2024 ANDPAD All Rights Reserved. 40 インデックスの種類 ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 01 B-tree Hash GIN GiST / SP-GiST 02 03 04 一般的な構造で、データを階層的なツリー構造で管理する。データが昇順または降 順に格納される。等価検索や範囲検索に適しています。 データをハッシュ関数を使用してマッピングする。主に長い文字列データの等価検 索に最適で、高速な検索が可能。ただし、範囲検索には向いていない。 多対多の関係を持つデータや複数の要素を持つデータの検索に適している。配列や JSON、テキストの要素検索に対して優れたパフォーマンスを発揮する。 さまざまなデータ型や演算子に対応可能。テキスト検索や、範囲データ・空間デー タ(地理情報など)や類似検索に適している。
  36. © 2024 ANDPAD All Rights Reserved. 41 木構造 効率的なデータの挿入・削除を可能にする構造 ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 木構造とは、一つの要素(ノード)が複数の子要素を持ち、子要素 が複数の孫要素を持ち、という具合に階層が深くなるほど枝分かれ していく構造。
  37. © 2024 ANDPAD All Rights Reserved. 42 木構造 ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 1 2 3 4 6 5 ルートノード リーフノード ノード 深さ 1 深さ 2 深さ 3 エッジ 高さ 3 高さ 2
  38. © 2024 ANDPAD All Rights Reserved. 43 二分探索木(Binary Search Tree,

    BST) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 4 2 1 3 6 5 8
  39. © 2024 ANDPAD All Rights Reserved. 44 二分探索木(Binary Search Tree,

    BST)とは何か ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 構造 各ノードには最大で2つの子ノードがあり、左の子ノードは親ノードよりも小さ く、右の子ノードは親ノードよりも大きいというルールで構成されている。 操作の時間計算量 探索、挿入、削除の操作は、木の高さに依存する。最悪の場合、木が片方に偏ると、 操作の時間計算量はO(n)になる。 よい点 / いまひとつな点 シンプルな構造で、比較的容易に実装でき、検索や挿入、削除操作が平均して O(log n)の時間で実行できるが、平衡性が保証されていないため、データの挿入順 によっては木が偏ってしまい、性能が劣化する可能性があります。 二分探索木(Binary Search Tree, BST)
  40. © 2024 ANDPAD All Rights Reserved. 45 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works 7を検索する場合 二分探索木(Binary Search Tree, BST) 4 2 1 3 6 5 8 違う 違う 違う 違う 違う 違う 7はなかった!
  41. © 2024 ANDPAD All Rights Reserved. 46 ydah | https://speakerdeck.com/ydah/makin

    g -and-learnin g -how-rdbms-works 4 2 1 3 6 5 8 7を検索する場合 4 <= 7 6 <= 7 7はなかった! 二分探索木(Binary Search Tree, BST)
  42. © 2024 ANDPAD All Rights Reserved. 47 二分探索木(Binary Search Tree,

    BST) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 5 3 2 4 6 1 追加順によっては深さが偏るという問題がある このノードを検索する場合は遅い
  43. © 2024 ANDPAD All Rights Reserved. 48 AVL木(Adelson-Velskii and Landis'

    tree) AVL木とは何か ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 構造 二分探索木に平衡条件を追加したデータ構造。各ノードについて、その左部分木と 右部分木の高さの差が1以下になるように常に保たれている。 操作の時間計算量 探索、挿入、削除の各操作の最悪時間計算量がO(log n)であり、バランスが崩れな いように保たれるため、常に効率的。 よい点 / いまひとつな点 バランスが保証されるため、最悪の場合でも高速な検索や挿入、削除が可能。ま た、木の高さが常にlog(n)以下に抑えられるため、性能が安定しています。しかし、 単純な二分探索木よりも挿入や削除にわずかに時間がかかる場合があります。
  44. © 2024 ANDPAD All Rights Reserved. 49 AVL木(Adelson-Velskii and Landis'

    tree) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 5 3 2 4 6 1 高さがズレた時に書いて回転して均す木 高さ 0 高さ 2 このノードを検索する場合は遅い
  45. © 2024 ANDPAD All Rights Reserved. 50 AVL木(Adelson-Velskii and Landis'

    tree) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 3 2 1 5 4 6 ずれた高さを回転して均等にする
  46. © 2024 ANDPAD All Rights Reserved. 51 AVL木(Adelson-Velskii and Landis'

    tree) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 3 2 1 4 6 5 ノードを付け替える 高さ 1 高さ 1 このノードも他のノードと変わらない
  47. © 2024 ANDPAD All Rights Reserved. 52 AVL木(Adelson-Velskii and Landis'

    tree) ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works とはいえデータが増えると木は高くなっていく 100億データで高さはおよそ33
  48. © 2024 ANDPAD All Rights Reserved. 53 B-tree そこで現れた B-tree(B木)

    1970年にRudolf BayerとEdward M. McCreightが発表した木構造 のデータ構造。ブロック単位のランダムアクセスが可能なHDD上に 木構造を構築するのに適した構造として知られる。 ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works Bayer, R.; McCreight, E. (July 1970). "Organization and maintenance of large ordered indices" https://dl.acm.org/doi/10.1145/1734663.1734671
  49. © 2024 ANDPAD All Rights Reserved. 54 B-tree B-treeとは何か ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 構造 二分探索木を拡張した多分木。各ノードは複数のキーと子ノードを持ち、キーは ソートされている。バランスの取れた木構造で、ルートからリーフまでの全てのパ スの長さが同じになるように設計されている。 操作の時間計算量 B-treeの高さはlogベースのt(n)に近似されるため、検索、挿入、削除の操作は最悪 でもO(log n)で行われる。 よい点 / いまひとつな点 ノード内に複数のキーを持てるため、ディスクI/Oが効率的で、大規模データベース やファイルシステムに適している。しかし、木全体にわたってキーが分散している ため、範囲検索に対しては効率がやや劣る場合がある。
  50. © 2024 ANDPAD All Rights Reserved. 55 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works B-tree近影 031 008 004 001 006 007 013 026 046 073 099 036 109 024 040 081 104 068
  51. © 2024 ANDPAD All Rights Reserved. 56 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 1つのキーに含めるポインタを増やしてツリーの高さを抑える 031 008 004 001 006 007 013 026 046 073 099 036 109 024 040 081 104 068
  52. © 2024 ANDPAD All Rights Reserved. 57 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 008 001 006 007 013 026 046 073 099 036 109 068 004 024 040 081 104
  53. © 2024 ANDPAD All Rights Reserved. 58 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 040 024 081 104
  54. © 2024 ANDPAD All Rights Reserved. 59 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 024 040 081 104
  55. © 2024 ANDPAD All Rights Reserved. 60 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 024 040 081 104
  56. © 2024 ANDPAD All Rights Reserved. 61 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 024 040 081 104
  57. © 2024 ANDPAD All Rights Reserved. 62 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 024 040 081 104
  58. © 2024 ANDPAD All Rights Reserved. 63 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 008 004 024 040 081 104
  59. © 2024 ANDPAD All Rights Reserved. 64 B-tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 範囲検索が苦手(001-013を検索する場合) 031 001 006 007 013 026 046 073 099 036 109 068 004 024 008 040 081 104
  60. © 2024 ANDPAD All Rights Reserved. 65 B+tree B+treeへの進化 B-treeの特徴を発展させ、データを全てリーフノードに格納し、

    リーフノード同士を連結リストで結ぶことで、範囲検索や順次アク セスを効率的に行うために改良された。1970〜1980年代にかけて のDBMSの進化とともに生まれた。 ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works Comer, Douglas (1979). "Ubiquitous B-Tree" https://dl.acm.org/doi/10.1145/356770.356776
  61. © 2024 ANDPAD All Rights Reserved. 66 B+tree B+treeとは何か ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 構造 データをすべてリーフノードに格納するB-treeの一種。内部ノードには索引だけが 保存され、実際のデータはリーフノードに持たせている。また、リーフノードは連 結リストでつながっており、範囲検索や順次アクセスが効率的に行える。 操作の時間計算量 B-tree同様、バランス木なので操作はO(log n)の時間で行えますが、リーフノード の連結リストにより、範囲検索がさらに効率的。 よい点 / いまひとつな点 範囲検索や順序付きデータの処理が高速で、リーフノードを順次にたどることで効 率的にデータを取得できる。しかし、挿入や削除の操作には、リーフノードと内部 ノードの両方の管理が必要で、多少のオーバーヘッドがある。
  62. © 2024 ANDPAD All Rights Reserved. 67 B+tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 070 024 030 050 010 020 050 060 090 100 110 120 030 040 150 130 140 B+tree近影 0090 0110 0130 150
  63. © 2024 ANDPAD All Rights Reserved. 68 B+tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 070 024 030 050 010 020 050 060 090 100 0090 0110 0130 150 110 120 030 040 150 130 140 範囲検索も改善(010-060を検索する場合)
  64. © 2024 ANDPAD All Rights Reserved. 69 B+tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 070 024 030 050 010 020 050 060 090 100 0090 0110 0130 150 110 120 030 040 150 130 140 範囲検索も改善(010-060を検索する場合)
  65. © 2024 ANDPAD All Rights Reserved. 70 B+tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 070 024 030 050 010 020 050 060 090 100 0090 0110 0130 150 110 120 030 040 150 130 140 範囲検索も改善(010-060を検索する場合)
  66. © 2024 ANDPAD All Rights Reserved. 71 B+tree ydah |

    https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works 070 024 030 050 010 020 050 060 090 100 110 120 030 040 150 130 140 範囲検索も改善(010-060を検索する場合) 0090 0110 0130 150
  67. © 2024 ANDPAD All Rights Reserved. 72 B+treeの構造を理解したので 構造や意図を理解した上で効果的なインデックスを 要は構造に基づいた適切な絞り込みができれば早い

    おそい例:カーディナリティが低いカラムに対してインデックスを 貼るのは遅い。複合インデックスを「first_name」と 「last_name」に設定している場合に「last_name」での検索は遅い。 •構造の理解が深まれば、何がよくて何がよくないかが分かる ydah | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works
  68. Confidential © 2024 ANDPAD All Rights Reserved. 73 結論 The

    spectacles of experience; throu g h them you will see clearly a second time. --Henrik I bsen
  69. © 2024 ANDPAD All Rights Reserved. 74 Stargaze at ydah

    | https://speakerdeck.com/ydah/makin g -and-learnin g -how-rdbms-works github.com/ruby/lrama