MySQLの高度な機能と内部構造の解説

データベース正規化の基本原則

第一正規形 (1NF)

テーブルの各カラムは分割不可能な原子値を持つ必要があります。

第二正規形 (2NF)

第一正規形を満たし、主キーが存在し、非キーカラムが主キーに完全依存している状態です。

第三正規形 (3NF)

第二正規形を満たし、非キーカラム間の推移的依存関係が存在しない状態です。

ストレージエンジンの詳細

主要ストレージエンジンの特性

InnoDBエンジン

  • ACIDトランザクションをサポート
  • 行レベルロックによる高並列性
  • 外部キー制約のサポート

MyISAMエンジン

  • トランザクション非サポート
  • テーブルレベルロック
  • 高速な読み込み性能

MEMORYエンジン

  • データをメモリ上に保持
  • ハッシュインデックスを採用
  • 一時テーブルやキャッシュ用途に適す

インデックスの基本概念

インデックスはデータ検索を効率化するためのデータ構造です。

メリットデメリット
データ検索の効率化とI/Oコスト削減 追加の記憶領域を消費
ソート処理のコスト削減 データ更新時のオーバーヘッド増加

B+Treeインデックス構造

MySQLで最も一般的に使用されるインデックス構造です。

// B+Treeの基本構造を示す疑似コード
class BPlusTreeNode {
    List<Key> keys;
    List<Pointer> pointers;
    boolean isLeaf;
}

class BPlusTree {
    BPlusTreeNode root;
    
    Value search(Key key) {
        // 検索アルゴリズムの実装
    }
}

インデックスの種類と特性

種類説明特徴
主キーインデックス主キーカラムに自動生成一意性を保障
ユニークインデックス重複値を防止複数設定可能
通常インデックス汎用的な検索最適化複数設定可能

トランザクション処理の基礎

ACID特性

  • 原子性 (Atomicity): 全操作の完全な実行
  • 一貫性 (Consistency): データ整合性の維持
  • 独立性 (Isolation): 並行実行時の影響分離
  • 持続性 (Durability): 変更結果の永続化

トランザクション分離レベル

レベルダーティリード非再現リードファントムリード
Read Uncommitted発生発生発生
Read Committed防止発生発生
Repeatable Read防止防止発生
Serializable防止防止防止

ロック機構の詳細

ロックの粒度による分類

  • グローバルロック: データベース全体のロック
  • テーブルロック: テーブル単位のロック
  • 行ロック: 行単位の細粒度ロック

InnoDBの行ロックタイプ

  • レコードロック: 単一行のロック
  • ギャップロック: 範囲のロック
  • ネクストキーロック: レコードとギャップの組み合わせ

MVCC (Multi-Version Concurrency Control)

複数バージョンのデータを維持することで、ブロックしない読み取りを実現します。

// MVCCの基本概念を示す疑似コード
class VersionChain {
    List<DataVersion> versions;
    
    DataVersion getVisibleVersion(Transaction tx) {
        // 可視性判定ロジック
    }
}

class DataVersion {
    TransactionId createdBy;
    Data data;
    Pointer previousVersion;
}

タグ: MySQL InnoDB ストレージエンジン インデックス トランザクション

5月16日 03:05 投稿