SQL Server の ID ギャップ: ロールバックの影響について
トランザクションのロールバック後、特に挿入を処理する場合に、SQL Server の ID (自動インクリメント) シーケンスに予期しないギャップが発生することがあります。 これはバグではありません。それはパフォーマンスを優先した設計の選択です。
シナリオを考えてみましょう。.NET トランザクションが ID の主キーを使用して SQL Server 2005 テーブルに挿入します。 エラーによって Rollback()
がトリガーされた場合、挿入された行は削除されます。 ただし、ID 値はすでにインクリメントされており、ギャップが残っています。
この非トランザクション動作により、パフォーマンスのボトルネックが防止されます。 テーブル A:
で自動採番 ID を使用する 2 つの同時トランザクションを想像してください。トランザクション 2 がトランザクション 1 の後に開始される場合、テーブル A の次の自動番号を確保するには、トランザクション 1 の完了を待つ必要があります。非トランザクションのアプローチにより、このブロックが回避されます。
したがって、厳密に連続した ID 値が重要な場合は、代替方法が推奨されます。 システムの設計では、厳密な連続番号付けよりも同時実行性が優先されます。
以上がトランザクションのロールバック後に SQL Server の ID ギャップが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。