750,000 エントリを含むテーブルでクエリを実行すると、パフォーマンスの問題が発生します。実行には 15 ~ 20 秒かかり、その間データベースへのアクセスがブロックされ、大量のエラー ログが作成されます (もちろん、怒っている顧客もいます)。
クエリは次のとおりです。
DECLARE @FROM_ID AS UNIQUEIDENTIFIER = 'XXX'
DECLARE @TO_ID AS UNIQUEIDENTIFIER = 'YYY'
update tbl_share
set user_id = @TO_ID
where user_id = @FROM_ID
and not exists (
select *
from tbl_share ts
where ts.file_id = file_id
and ts.user_id = @TO_ID
and ts.corr_id = corr_id
and ts.local_group_id = local_group_id
and ts.global_group_id = global_group_id
)
TSQL の知識が限られているため、現在は行き詰まっています。私は疑問に思っています:
- 一時テーブルを作成する必要があります
- 「*」以外を選択する必要があります
これは本番データベースであり、日中は常時 10 ~ 20 人の顧客が接続しているため、テストを実行する機会はあまりありません。
ご協力いただきありがとうございます!