0

こんにちは私はイベント管理サイトを作っています。世界中のユーザー(それぞれが一意のログインIDを持っている)は、イベントを追加できます。イベントは一時テーブルに保存され、管理者によって承認されるとイベントテーブルに転送されます。

event_idに非常に効率的なキーを選択する必要があります。代理キーが最適なオプションになります。現在、自動インクリメントを使用しています。

1)自動インクリメントは、テーブルに存在する最後の最大の主キーまたは追加された最後のキーを考慮しますか?

問題)イベントID 41、42、43が一時テーブルに存在します。管理者はevent_id43を承認し、一時テーブルを離れます。現在、一時テーブルの最大のキーは42です。

追加された次のイベントは、一時テーブルでID43に再度割り当てられます。なぜこうなった ?

他のものを主キーとして使用したい。私は何をすべきか ??タイムスタンプ+ユーザーIDは良いオプションです。これにより、主キーが非常に長くなります。

4

1 に答える 1

1

自動インクリメント値はカウンターから取得されるため、通常、値を 2 回取得することはありません。また、すべてのテーブルには独自のカウンターがあります。

ただし、InnoDB ストレージ エンジンには問題があります。サーバーの起動時にカウンターが列の最大値にリセットされるため、削除と挿入の間に MySQL を再起動すると、再び 43 になることがあります。MyISAM ストレージ エンジンを使用する場合、カウンターはディスクに保存されるため、これは発生しません。

スケーラビリティのために、UUID の使用を推奨する人もいます。UUID を使用すると、主キーを誤ってどこかで再利用することを恐れずに、複数のサーバー間でデータベースを分割できるからです。ただし、UUID キーにはより多くの CPU とストレージが必要です。

于 2012-09-20T07:23:52.413 に答える