OK、私は SQLite を初めて使用しますが、次のクエリを使用して既にこれを正常に実行しています。
UPDATE stuff
SET UserName = (SELECT UserName FROM Temp_Stuff WHERE Temp_Stuff.EmpID = stuff.EmployeeID
これstuff
は、4995 行とTemp_Stuff
1814 行がある場合にうまく機能し、約 2 秒で実行されます。
このまったく同じクエリstuff
を 60,000 行とTemp_Stuff
55,000 行で試してみると、クエリ中にロックされ、何も処理されないようです (20 分以上待ちました)。
これを達成するためにvb.netを使用しており、ExecuteNonQueryメソッドをトランザクションにラップしており、エラーが発生した場合はトランザクションをロールバックします(この時点に到達しません)。SQLiteでこれを達成するより効率的な方法はありますか? Updateステートメントでは結合が許可されていないことに気付きました。そのため、そのアイデアは破棄されました。これは SQLite 固有の問題のようです。
*クエリ プラン: *
0 0 0 SCAN TABLE stuff(~1000000 rows)
0 0 0 EXECUTE CORRELATED SCALAR SUBQUERY 0
0 0 0 SCAN TABLE Temp_Stuff(~100000 rows)