B-Tree - ページ単位の入出力に合わせた索引の木

B-Tree は、1 つのノードに数百件のキーを並べる事で、木の段数を数段に抑えた探索木です。ノードとは木を構成する 1 つの箱を指します。この構造が最もよく使われるのは、RDB(リレーショナルデータベース)の索引(インデックス)の実装で、CREATE INDEX で作られる一般的な索引や、主キー・一意制約を支える索引には B-Tree 系の構造が広く使われます。 ...

2026年8月10日 · 更新: 2026年8月26日 · 19 分 · nchika

Soft Delete - 削除フラグを最初の選択肢にしない

削除フラグとは、行を DELETE する代わりに「削除済み」を表す列を立て、通常の問い合わせからその行を除外する設計です。is_deleted のような真偽値の列や、deleted_at のような日時の列で表し、論理削除(logical delete、soft delete)とも呼ばれます。行そのものを表から取り除く物理削除と対になる語です。 ...

2026年8月11日 · 更新: 2026年8月26日 · 16 分 · nchika

Query Processing - SQL から実行計画を作り、動かすまで

Query Processing(問い合わせ処理)は、DB(データベース)が受け取った SQL 文を実行可能な手順に変換し、その手順を動かして結果の行を返すまでの処理です。ここで選ばれた手順を実行計画(クエリプラン、query plan)と呼びます。 ...

2026年8月11日 · 更新: 2026年8月26日 · 19 分 · nchika

WAL - 書き込み先行ログと 2 つのウォーターマーク

WAL(Write-Ahead Log、書き込み先行ログ)は、状態を変更する前にその変更内容を追記専用のファイルに書き、ディスクに書き終えてから応答を返す仕組みです。再起動した時は、スナップショットやチェックポイント以降のログを読み直して同じ変更を適用し、停止する直前の状態を復元します。利用できるスナップショットが無ければ、ログの先頭から再生します。ここでは、1 台のサーバが状態を失わないための WAL から、ログを複製した時に現れる 2 つの位置までを扱います。 ...

2026年8月5日 · 更新: 2026年8月26日 · 15 分 · nchika

Index Scan - 索引から表の行に届くまでに何が起きるか

Index Scan は、索引(インデックス)を辿って条件に一致する行の在り処を求め、そこから表の行を読み出す方法です。DB(データベース)が 1 つの表から行を取り出す手段の 1 つで、表を先頭から順に読む全走査(sequential scan)と対になります。 ...

2026年8月11日 · 更新: 2026年8月26日 · 17 分 · nchika

NULL - 値が無い事の表し方と、三値論理が及ぼす影響

NULL は、値が存在しない事や不明である事を表すために SQL が特別扱いする印です。数値の 0、空文字列、真偽値の false、要素が 0 個の配列は、どれも通常の値なので NULL とは別に扱われます。 ...

2026年8月11日 · 更新: 2026年8月26日 · 16 分 · nchika

Transaction Isolation - 同時実行で現れる異常と分離レベル

Transaction Isolation(分離)は、複数のトランザクションを同時に実行した時に、互いの読み書きがどのように観測され、どのような結果まで許されるかを定める規則です。ACID(Atomicity、Consistency、Isolation、Durability。原子性・一貫性・分離・耐久性)の I です。 ...

2026年8月11日 · 更新: 2026年8月26日 · 16 分 · nchika

Snapshot Isolation - 固定したスナップショットで読み、書き込みの重なりを止める

Snapshot Isolation は、トランザクションごとに 1 つのスナップショットを固定して読み、書き込みが重なった時に片方を中止する分離の方式です。Berenson 氏らが 1995 年に発表した論文「A Critique of ANSI SQL Isolation Levels」が定義しました。SQL 標準で名前が定義された 4 つの分離レベルとは別に定義された方式で、標準の表には出てきません。 ...

2026年8月11日 · 更新: 2026年8月26日 · 10 分 · nchika

Foreign Key - 参照先の存在を DB に保証させる

外部キー制約(foreign key constraint)は、ある表の列に入っている値が、別の表に実在する行を指している事を DB(データベース)に保証させる仕組みです。この保証が保たれている状態を参照整合性(referential integrity)と呼びます。 ...

2026年8月12日 · 更新: 2026年8月26日 · 13 分 · nchika

UNIQUE Constraint - 重複を最後に止める場所を決める

一意制約(unique constraint)は、ある列、または複数の列の組に入っている値が表の中で重複しない事を DB(データベース)に保証させる仕組みです。SQL では、列の定義に UNIQUE を書くか、表に対して UNIQUE (列名, ...) を書いて宣言します。 ...

2026年8月12日 · 更新: 2026年8月26日 · 12 分 · nchika

Transaction Scope - トランザクションに何を入れるか

Transaction Scope(トランザクションの範囲)は、BEGIN から COMMIT までの間にどの処理を入れるかの決め方です。失敗したら全部戻したい処理をまとめて入れる箱ではありません。範囲を広げるほど DB 接続を長く保持し、早い段階で取った行ロックも後続処理の間ずっと保持する事になります。 ...

2026年8月12日 · 更新: 2026年8月26日 · 10 分 · nchika

Deadlock - 更新順序が逆になると何が起きるか

Deadlock(デッドロック)は、2 本以上のトランザクションが、それぞれ自分の取ったロックを持ったまま他のトランザクションのロックの解放を待ち、待つ先を辿ると自分に戻ってしまうために、どれも先に進めなくなる状態です。 ...

2026年8月12日 · 更新: 2026年8月26日 · 13 分 · nchika