各行にランダムに生成された主キー、メッセージ、およびユーザーが含まれるDBテーブルがあります。各ユーザーには約10〜100のメッセージがありますが、1万〜5万のユーザーがいます。
私は一度に各ユーザーのために毎日メッセージを書きます。テーブルをできるだけ小さくするために、新しいメッセージを作成する前に、各ユーザーの古いメッセージを破棄したいと思います。
今、私はこれを効果的に行っています:
delete from table where user='mk'
次に、そのユーザーへのすべてのメッセージを書き込みます。同時に多くのスレッドがこれを実行しているため、多くの競合が発生しています。
各ユーザーの最新のメッセージセットを保持するための追加の要件があります。
DBに直接アクセスできません。私はいくつかの中古のフィードバックに基づいて問題を推測しようとしています。私がこのシナリオに焦点を当てている理由は、削除クエリが(私の知る限りでは)多くの待機時間を示していることに加えて、新しく追加された機能であるためです。
誰かアドバイスはありますか?
次の方が良いでしょうか:
select key from table where user='mk'
次に、そこから個々の行を削除しますか?私はそれがより残酷なロックにつながるかもしれないと思っています。