私はInnoDBエンジンでのMySQLのテーブルv_extを持っている:
- ID:主キー
- コード:コードの事前生成されたリスト(ランダムに1000個のコードが生成されるとします)
- user_id:最初はNULLMySQLのInnoDBのSELECT ... LIMIT 1 ... LIMIT 1
ユーザーがアイテムを購入すると、コードを受け取ります。私はuser_id列を移入するためにテーブルを更新する必要があります。私は、同時に購入する数千のユーザーを持っている場合
START TRANSACTION;
SELECT id FROM v_ext WHERE user_id IS NULL LIMIT 1 FOR UPDATE; -- return id 54 for ex.
UPDATE v_ext SET user_id=xxx WHERE id=54;
COMMIT;
または
UPDATE v_ext SET user_id=xxx WHERE user_id IS NULL LIMIT 1;
目のオプションは安全です:私は2つの選択肢がありますか?その場合、この2番目のオプションは1つのクエリしか必要ないため、パフォーマンスが向上すると想定するのは正しいですか?
'user_id'に' UNIQUE'制約がありますか? (つまり、ユーザーは1つのコードしか持てませんか?) – eggyal
'EXISTS'は並行性とパフォーマンスの面でより優れた使い方です。 – bonCodigo
UNIQUEは制約ではありません。user_idは、商品を購入するのと同じくらい多くのコードを取得できます。 – JScoobyCed