mysql のプライマリ キーの自動インクリメントの理由: 1. データ レコード自体はプライマリ インデックスのリーフ ノードに保存されます; 2. MySQL はプライマリ キーに基づいて適切なノードと場所にデータ レコードを挿入します。 ; 3. テーブルは自動インクリメント主キーを使用し、新しいレコードが挿入されるたびに、レコードは現在のインデックス ノードの後続の位置に順番に追加されます。
MySQL が自動インクリメント主キーを使用する理由は、InnoDB テーブルを使用すると非常に便利であり、効率が大幅に向上するためです。
推奨コース: MySQL チュートリアル 。
InnoDB エンジン テーブルの特徴
1. InnoDB エンジン テーブルは、B ツリーに基づくインデックス構成テーブル (IOT)です
B について-tree
B ツリーの特徴:
すべてのキーワードはリーフ ノードのリンク リスト (密なインデックス) に表示され、キーワードはリンク リストに表示されます。たまたまシーケンシャルです;
非リーフ ノードにヒットすることは不可能です;
非リーフ ノードはリーフ ノードのインデックス (スパース インデックス) と同等であり、リーフ ノードも同等ですストレージ (キーワード) データのデータ層;
2. 主キー (PRIMARY KEY) を定義すると、InnoDB は主キーをクラスター化インデックスとして選択します。主キーが明示的に定義されていない場合は、 InnoDB は、NULL を含まない最初のインデックスを選択します。値の一意のインデックスが主キー インデックスとして使用されます。そのような一意のインデックスがない場合、InnoDB は、組み込みの 6 バイト長の ROWID を暗黙的なクラスター化された ROWID として選択します。インデックス (ROWID は、行レコードが書き込まれ、主キーがインクリメントされるとインクリメントされます。この ROWID は、暗黙的に引用できる ORACLE の ROWID とは異なります)。
3. データ レコード自体は、メイン インデックス (B ツリー) のリーフ ノードに保存されます。これには、同じリーフ ノード (1 つのメモリ ページまたはディスク ページのサイズ) 内の各データ レコードが主キーの順序で格納される必要があるため、新しいレコードが挿入されるたびに、MySQL はその主キーに基づいて適切なノードにそのレコードを挿入します。 . と位置、ページが読み込み係数 (InnoDB のデフォルトは 15/16) に達すると、新しいページ (ノード) が開かれます
4. テーブルが自動増加する主キーを使用する場合、すべての新しいレコードが挿入されると、そのレコードは現在のインデックス ノードの後続の位置に順番に追加されます。ページがいっぱいになると、新しいページが自動的に開かれます。
5. 自動でない場合は、新しいページが自動的に開きます。 -増加する主キーが使用される (ID 番号や学生番号などの場合) 、毎回挿入される主キーの値はほぼランダムであるため、各新しいレコードは既存のインデックス ページの中央のどこかに挿入する必要があります。今回、MySQL は新しいレコードを適切な場所に挿入するためにデータを移動する必要があり、ターゲット ページがディスクに書き戻されてキャッシュからクリアされている可能性もあります。この時点で、データを読み戻す必要があります。ディスクからデータが削除されるため、多くのオーバーヘッドが追加されます。同時に、頻繁に移動およびページング操作が行われると、多くのフラグメントが発生し、その結果、イメージのコンパクトさが低下します。インデックス構造では、テーブルを再構築し、埋めるページを最適化するために OPTIMIZE TABLE が必要です。
まとめると、InnoDB テーブルのデータ書き込み順序と B-tree インデックスのリーフ ノードの順序を一致させることができれば、この時点で最もアクセス効率が高くなります。以下の場合のアクセス効率が向上します 最高:
自動インクリメントカラム(INT/BIGINT型)を主キーとして使用 この時の書き込み順序は自動インクリメントとなり、分割と一致しますB の順序 リーフ ノードの数;
このテーブルでは指定されていません オートインクリメント列が主キーとして使用されており、主キーとして選択できる一意のインデックスがありません (上記の条件)このとき、InnoDB は組み込み ROWID を主キーとして選択し、書き込み順序は ROWID の増加順序と一致します;
さらに、InnoDB テーブルに主キー、主キーとして選択できる一意のインデックスがありますが、一意のインデックスは増分関係 (文字列、UUID、複数フィールド結合の一意のインデックスなど) にない場合があり、テーブルのアクセス効率が低下します。比較的貧乏であること。
以上がMySQL の主キーが自動的に増加するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。