コース一覧
データベース内部構造:インデックス・トランザクション・分散DB
NewSQL と分散 SQL

データベース内部構造:インデックス・トランザクション・分散DB

SQLの書き方ではなく、DBMSの内側を学ぶコースです。RDBとNoSQL、正規化、B-tree、トランザクションとMVCC、クエリプランナ、レプリケーションと分散SQLを通して、性能と整合性の判断根拠を身につけます。

1
データベースの基礎
0. データベースとは8分
1. RDB と NoSQL の違い8分
2. データベースの歴史8分
3. エンティティ関係モデル (ER)8分
4. 主キー・外部キー・候補キー8分
2
正規化
0. 正規化とは何か8分
1. 第1正規形8分
2. 第2正規形8分
3. 第3正規形8分
4. 非正規化のトレードオフ8分
3
インデックスと B-tree
0. インデックスの役割8分
1. B-tree の仕組み8分
2. B+tree(実際の DB 実装)8分
3. ハッシュインデックス8分
4. カバリングインデックス8分
4
トランザクションと ACID
0. トランザクションとは8分
1. ACID 特性8分
2. 分離レベル8分
3. MVCC(マルチバージョン同時実行制御)8分
4. デッドロックと回避8分
5
クエリ最適化
0. クエリプランナの役割8分
1. EXPLAIN の読み方8分
2. Nested Loop / Hash / Merge Join8分
3. インデックスチューニング8分
4. 統計情報とカーディナリティ8分
6
スケーリング
0. レプリケーション8分
1. シャーディング8分
2. CAP 定理8分
3. 結果整合性8分
4. NewSQL と分散 SQL8分

データベース内部構造:インデックス・トランザクション・分散DB

01データベースとは
02RDB と NoSQL の違い
03データベースの歴史
04エンティティ関係モデル (ER)
05主キー・外部キー・候補キー
06正規化とは何か
07第1正規形
08第2正規形
09第3正規形
10非正規化のトレードオフ
11インデックスの役割
12B-tree の仕組み
13B+tree(実際の DB 実装)
14ハッシュインデックス
15カバリングインデックス
16トランザクションとは
17ACID 特性
18分離レベル
19MVCC(マルチバージョン同時実行制御)
20デッドロックと回避
21クエリプランナの役割
22EXPLAIN の読み方
23Nested Loop / Hash / Merge Join
24インデックスチューニング
25統計情報とカーディナリティ
26レプリケーション
27シャーディング
28CAP 定理
29結果整合性
30NewSQL と分散 SQL

データベース内部構造:インデックス・トランザクション・分散DB

NewSQL と分散 SQL

分けたら、SQL が書けなくなった

書き込みが 1 台で足りなくなり、データを複数のサーバへ分けた。ここまでは狙いどおりです。ところがその後、開発の手が止まります。

集計は、各サーバへ投げて足し上げるコードを自分で書くことになります。別のサーバにあるテーブルとの結合は、両方から引いてきてアプリのメモリ上で突き合わせることになります。2 つのサーバにまたがる更新は、片方だけ成功した場合の後始末を自分で書くことになります。SQL 1 行で済んでいたものが、そのたびにアプリ側の処理へ移っていきます。

分散はしたい、けれど SQL とトランザクションは手放したくない。この要求に応えようとしているのが、分散 SQL と呼ばれる系統のデータベースです。利用者から見ると 1 台の RDB に見え、内部では自動でデータが分割され、必要ならサーバをまたいだトランザクションも張れます。

順番さえ決められれば、分けたままで揃う

分けた状態で ACID を保つのが難しいのは、「どちらの書き込みが先か」を全体で一致させられないからです。各サーバの時計は少しずつずれているので、時刻を見るだけでは順番が決まりません。

やり方は 2 段構えです。

まず、同じデータの塊を持つサーバどうしで多数決を取ります。変更はまず代表役のサーバに届き、代表が他の複製へログを送り、過半数が受け取ったところで確定とします。過半数で決めるので、少数側が落ちても止まりません。3 台なら 1 台まで、5 台なら 2 台までの故障に耐えます。

過半数で決めることには、もう 1 つ効果があります。分断で 2 つに割れても、確定を進められるのは過半数を保てた側だけなので、両側が別々の答えを確定させることが起きません。少数側は書き込みを受け付けられなくなり、前の回でいう「エラーを返す」側の振る舞いになります。

その上で、全体を通した順番を決める仕組みを置きます。番号を配る役を中央に 1 つ立てる方式と、各サーバのローカル時計に論理的なカウンタを足して補正する方式があります。どちらも目的は同じで、離れた場所で起きた 2 つの書き込みに、矛盾しない前後関係を与えることです。

その遅さを払えるか

いいことばかりではありません。書き込みは毎回、過半数の返事を待ってから確定します。1 台のディスクで完結する場合と比べれば、確実に遅くなります。データは通常 3 か所へ複製されるので、ディスクもサーバ台数も増えます。故障時の挙動や複製の配置を理解していないと、運用でつまずきます。

ですから、データが数百 GB で書き込みが秒間数百程度なら、普通の PostgreSQL や MySQL の方が速くて簡単です。分散 SQL が効いてくるのは、1 台では受け切れないところまで書き込みが伸びたときに、それまでのアプリのコードを書き直さずに済ませたい場合です。

選ぶ前に、いま困っているのが本当に 1 台の書き込み上限なのかを確かめてください。索引の張り忘れや、1 リクエストで何十回も走るクエリが原因だった、という話は規模の大きい現場ほどよくあります。台数を増やす判断は、そこを潰した後の話です。

トランザクションの中身から、遅いクエリの追い方、台数を増やしたときに何が壊れるかまで通ってきました。製品が変わっても、土台は同じところにあります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • SQLデータベースを操作するための共通言語
  • テーブルDB の表 (Excel のシートみたいなもの)
  • メモリプログラムとデータを一時保持する高速領域
  • 処理計算や代入を表す長方形
  • トランザクション「全部成功 or 全部なかったことに」をまとめる単位
  • データベースデータを構造化して保存する仕組み
  • ACID原子性・一貫性・独立性・永続性の4特性
  • カウンタ数を保持して増減する典型 UI
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • 結果整合性

    BASE と AP 系システムが選ぶ妥協と利点

  • CAP 定理

    Consistency / Availability / Partition tolerance の同時達成不可性

  • シャーディング

    水平分割でデータを分散し書き込みを拡張する手法

  • レプリケーション

    Primary / Replica 構成での読み取り分散と整合性

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。