好的,我是 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 行和55,000 行时尝试这个完全相同的查询时Temp_Stuff
,它似乎在查询期间被锁定并且不处理任何东西(我等了 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)