【MYSQL】純乾物!面接問題:InnoDB!完全解析!コレクションをお勧めします!


InnoDBアーキテクチャ
次の図は、公式ドキュメントに記載されているInnoDBストレージ構造です.
InnoDBのログ先行ポリシーは、メモリからディスクの順にデータを処理します.
その利点は以下の点である.
  • メモリでの操作が完了すると、成功に戻ることができ、実行効率が高い
  • データがディスクに落下中に電源が切れる場合でも、redoログから
  • を取り戻すことができます.
  • InnoDBのキャッシュプールは、ページチェーンテーブルによって実現する、効率が高い
  • .
    InnoDBのディスクの中のストレージは以下の特徴があって、私は簡略化をして直接重点を際立たせて、みんなの記憶を便利にします
  • InnoDBテーブルの制限:1つのテーブルの補助インデックスは最大64個、1行のサイズは最大65535個、組み合わせインデックスは最大16個のフィールド
  • である.
  • 表領域
  • システム表空間
  • File-per-Table表領域
  • Undo表空間
  • 一時表領域

  • 索引
    InnoDBにインデックス組織テーブルを介してインデックスを格納します.
    InnoDBでは、プライマリ・キー・インデックスはB+インデックスを使用しています
    B+ツリーの特徴
  • 非リーフノード毎にキー値のみが記憶する、データ
  • は記憶されない.
  • の一般的な高さは2-4層なので、検索速度は
  • 速いです.
    セカンダリインデックスは非集計インデックスと呼ばれ、セカンダリインデックスはプライマリ・キーの値を格納し、プライマリ・キーの値を取得してからデータを検索するプロセスをリターン・テーブルと呼ぶ.
    テーブルに戻ると聞かれたら、テーブル-補助インデックス-インデックスの論理的な解釈に従うことができます.
    インデックスの上書きとは、テーブルに戻る必要がなく、検索するカラムを見つける補助インデックスです.
    インデックスを結合する順序が重要であるため、インデックスを作成する際にカラムの順序に注意する必要があります.
    取引
    ACID
  • 原子性:Atomicity
  • 整合性:Consistency
  • 隔離性:Isolation
  • 持続性:Durability
  • トランザクション独立性レベルは4種類あり、InnoDBではデフォルトでREPEATABLE READがサポートされています.
    InnoDBはredoログによってトランザクションを実現し、redoログはディスクに格納された物理操作ログである.
    binlogは、メモリにログの一貫性を維持する論理ログです.
    ダーティリードとは、あるトランザクションがコミットされる前に、別のトランザクションがデータを読み出すことによってデータが一致しないことを意味します.
    幻読みの問題は、1つのトランザクションで同じSQLが複数回実行され、結果セットが異なることです.
    ロック
    Innodbは行レベルロックをサポートします.
    行レベルロックは共有ロックと排他ロックに分けられます.
  • 共有ロック(Sロック)は、読み取りのみ可能であり、
  • を修正することはできない.
  • 排他ロック(Xロック)、読み取りも書き込みもできない
  • 意向ロック(Intention Locks)
  • は共有ロック(IS)を意図し、共有ロックを追加する前に得る必要があるロック
  • である.
  • は排他ロック(IX)を意図し、排他ロックを追加する前にロック
  • を得る必要がある.
    行ロックのストレージ構造
    typedef struct lock_rec_struct        lock_rec_t
    struct lock_rec_struct{
         
        ulint space;    /*space id*/
        ulint page_no;  /*page number*/
        unint n_bits;   /*number of bits in the lock bitmap*/
    }
    

    ロックロジック:ロック-一意インデックスの競合チェック-GapロックまたはNext-Keyロックを判断-Xロックを追加
    面接側のポイント
  • 基本的なクエリ構文
  • インデックス
  • ロック
  • ストレージ構造は、インデックスのときに自分でポイントを持ち出し、自分にいくつかのハイライトを作成することをお勧めします.