SQLite使用另一个表从一个表更新列

时间:2013-03-15 16:27:12

标签: vb.net ado.net sqlite

好的,我是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)

1 个答案:

答案 0 :(得分:1)

查询计划显示Temp_Stuff完全扫描 stuff表中的每个记录。

EmpID列上添加索引,以便查找运行得更快。 (要获得稍高的性能,请在EmpIDUserName列上使用覆盖索引。)

SQLite永远不会自动为命名表创建索引;您必须明确定义它们,或者使用UNIQUEPRIMARY KEY约束隐式定义它们。