我需要从查询表中设置主表中的值,如下所示:
UPDATE primary
SET primary.value =
(SELECT lookup.value FROM lookup WHERE primary.key = lookup.key)
关键字段是两个表中的VARCHAR字段,并且在主表中有一个索引,在查找表中有唯一索引。
这两个表的行数约为1000万行。
在具有12个内核且分配了15G堆空间的快速服务器上使用HSQLDB 2.3需要相当长的时间。
我应该知道尽可能加快这项操作的速度?有什么我可以做大量的错误,以至于表现可能会受到严重影响吗?涉及的VARCHAR键字段的最大大小是否会产生严重影响?
我已经看到理论上有一些替代方法如何在SQL中执行此操作,人们声称它们更快,但HSQLDB似乎不支持任何这些。
答案 0 :(得分:0)
回答一句:
您实际做的是:向数据库分派1000万(子)选项(至少在大多数数据库系统中)。我不知道这背后的真正需求,但我会尝试用批量的EXPORT / LOAD表来解决这个问题
答案二:您可能会遇到一个非常好的锁定和日志记录(LOGFILE)问题。再次:我会尝试使用批处理中的EXPORT / LOAD表
编辑:导出/导入 - 我不知道(您需要的)语法,基础知识
EXPORT
select -needed fields-
from
primary, lookup
where
primary.key = lookup.key -- this will be fast
IMPORT into primary pevios EXPORT
编辑: 尝试“独家模式中的锁定表”bofore开始更新