mysql の主キーは次のように分割されます: 1. 自動インクリメント シーケンス; 2. UUID 関数によって生成されるランダム値; 3. ユーザーによって登録された一意のアカウント名; 4. ベースの同様の自動インクリメント値を生成シーケンスジェネレータなどの一連のメカニズムに関する。
(InnoDB エンジンの場合) 実際の運用環境では、次の 4 種類の属性を主キーとして使用する場合があります:
(1)。シーケンス;
(2). UUID() 関数によって生成されたランダム値;
(3). ユーザーによって登録された一意のアカウント名、文字列タイプ、通常の長さ: 40 文字;
(4). シーケンス ジェネレーターなどの一連のメカニズムに基づいて自動インクリメントと同様の値を生成します;
次に、これら 4 種類の属性それぞれの長所と短所を分析しましょうテーブルの主キーとして。 :
(1)自動インクリメント シーケンス : 小さい値から大きい値へ、または大きいものから小さい値へのシーケンシャル パターンで新しい値を追加します。データ型も主キー値の比較に役立ちます; ストレージ容量も比較的小さい 最小値、通常は次のように設定されます: 4 バイトの INT 型または 8 バイトの BIGINT 型; データを水平に分割したい場合は、mysqld の 2 つのパラメータを設定することもできますインスタンス: auto_increment_increment と auto_increment_offset; さらに唯一の欠点は、自動インクリメント シーケンスがテーブル レベルのグローバル ロックであることです 5.0 シリーズで大規模な同時書き込みが発生すると、ロックの解放メカニズムによりボトルネックが発生しやすくなりますただし、5.1 シリーズでは改善されており、この問題は基本的に存在しません;
(2)UUID() 関数: 値はランダム性、つまり値の生成の固定部分です。順序付けされておらず、同じサーバー上で生成された値の同じ部分は 77.8% です。生成された値の文字数は 36 で、utf8 エンコーディングに従って計算され、占有される記憶領域は 36 バイトです。データの水平分割サポートの場合、いいえ特別な設定が必要です;
(3)ユーザーが登録したアカウント名、文字列型を使用し、その値の生成はユーザーの入力に依存するため、データは基本的に追加されます順序付けされておらず、文字列の長さも不確実です。長さの最短値と最大値の制限は、以前の技術によってのみ制御でき、水平分割がサポートされています。特別な設定は必要ありません。
(4)シーケンス ジェネレータのアーキテクチャは自動インクリメント シーケンスに似ていますが、追加の開発ワークロードとサードパーティ サービスの提供が必要です。グローバルなワード増加の問題を回避します。自動インクリメント シーケンスでロックし、同時実行性を向上させ、データの水平分割をより適切にサポートできます。
(5) デュアル マスター レプリケーション アーキテクチャで遭遇する確率的シナリオ: マスター サーバー データが正常に実行されたがコピーされなかった場合オンライン バックアップ サーバーに問題が発生する可能性はあります。他の種類の方法も手動介入によって解決する必要があります。簡単で合理的な自動化された方法はありません。上記の 4 つの方法は回避できません。主キーとしての 4 つの属性値の長所と短所を分析し、主キーに求められる優れた品質を比較することは、前述したとおりですが、水平分割の問題を考慮しないと、追加の設定トラブルが発生します。自動インクリメント シーケンスは、主キー フィールドの最良の選択です。ユーザーの登録アカウント自体が一意性と空でないことが必要なシナリオでは、水平分割の問題を考慮した場合、主キー フィールドの選択肢として使用できます。 、自動インクリメント シーケンス ジェネレーターのアーキテクチャが使用されており、非常に簡単で便利で信頼性の高い実装です。生成される値は主キー フィールドの最適な選択です。以上がmysqlの主キーとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。