【发布时间】:2013-12-05 20:32:03
【问题描述】:
我需要从这样的查找表中设置我的主表中的值:
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 似乎不支持其中任何一种。
【问题讨论】:
-
什么是“难以置信的长”?
-
请在涉及的表上发布定义的索引。您是否尝试过
MERGE声明?你可以在那里加入。 -
实际的问题是:你为什么要首先进行更新?如果
primary.key引用lookup表,您始终可以在查询中加入lookup表。据我所知,您实际上是在复制外键引用的数据。 -
primary.value 上有一个非唯一键,lookup.value 上有一个唯一键 我想这样做的原因是我最终需要一个非规范化的快速访问表.换句话说,我希望能够通过从一个表中检索一行来查找我需要的所有信息(一旦该表完成,它将不再更新,因此不需要规范化)。跨度>
标签: sql performance sql-update hsqldb