gpt4 book ai didi

vb.net - SQLite使用另一个表更新一个表中的列

转载 作者:行者123 更新时间:2023-12-03 19:52:32 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

关于vb.net - SQLite使用另一个表更新一个表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com