SQL Server の ID ギャップ: 理解と軽減
概要
SQL Server の IDENTITY プロパティは、整数値を自動的にインクリメントすることで主キーの管理を簡素化します。 ただし、このシーケンスに予期しないギャップが発生し、ユーザーが困惑する可能性があります。
根本原因: ID キャッシュ
Microsoft のドキュメントでは、SQL Server (2012 以降) がパフォーマンスを最適化するために ID キャッシュを採用していると説明しています。 このキャッシュは通常、int
IDENTITY 列に対して 1,000 に設定され、値のブロックを事前に割り当てます。
キャッシュ サイズの影響
この例では、1,000 値のキャッシュにより、ID の増分が約 100 増加することを示しています。 1,206,321 のような値が割り当てられると、次の 1,000 が予約され、ギャップが生じます。 一貫した最後の 3 桁 (例: 321) は、予約されたブロックの終わりを反映します。
ギャップ削減のための戦略
アイデンティティのギャップは本質的に問題ではありませんが、望ましくない場合があります。 次のオプションを検討してください:
ALTER DATABASE SCOPED CONFIGURATION
と IDENTITY_CACHE = OFF
を併用すると、特定のデータベースのキャッシュが無効になります。重要な考慮事項
アイデンティティのギャップを完全に排除する方法はありません。 同時挿入やトランザクションの失敗によっても作成される可能性があります。 絶対的なシーケンスの整合性が必要なアプリケーションの場合は、GUID またはカスタム シーケンス生成メカニズムを検討してください。
以上がSQL Server ID の増分で突然値がスキップされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。