2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

データベースインデックスと双方向連結リストの必要性

Posted at

📘 データベースインデックスと双方向連結リストの必要性

📌 背景

データベースにおけるインデックスは、検索を高速化するために「論理的な順序」を保ちながらデータを扱います。
ただし、物理的な順序を常に維持すると、INSERTDELETE のたびに大規模なデータ移動が必要となり、非常に非効率です。

この問題を解決するために B-Tree が利用され、そのリーフノードは 双方向連結リスト で接続されています。


📌 単方向連結リストと双方向連結リストの違い

単方向連結リスト (Singly Linked List)

  • 各ノードは next のみを保持
  • 前から後ろへ一方向にしか辿れない
  • 欠点:
    • ORDER BY ... DESC のように逆順で結果を取得する場合、末尾まで辿らなければならない
    • 範囲検索の柔軟性が低い

双方向連結リスト (Doubly Linked List)

  • 各ノードは prevnext の両方を保持
  • 前後どちらの方向にも辿れる
  • 利点:
    • 昇順 (ASC) / 降順 (DESC) の両方を効率的にサポート
    • 範囲検索で開始位置に応じて柔軟に処理可能

📌 DBインデックスでの利用方法

  • 探索: B-Tree 構造で高速に対象データを特定
  • 順序維持: リーフノード同士を双方向連結リストで接続
  • 結果取得:
    • ASC → 先頭リーフから順次読み込み
    • DESC → 末尾リーフから逆方向に読み込み
-- 昇順
SELECT * FROM users ORDER BY id ASC LIMIT 10;

-- 降順
SELECT * FROM users ORDER BY id DESC LIMIT 10;

これにより、インデックスは 検索性能 + 両方向の範囲探索 を効率的に実現できます。


✅ まとめ

  • 物理的順序を維持するのは高コスト → DBMS は B-Tree + 双方向連結リストで解決
  • 双方向連結リストにより、ASC/DESC 双方向の探索範囲検索の効率化 が可能
  • インデックスは「ただ検索を速くする」だけではなく、順序付きのデータアクセスを最適化する仕組み である
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?