Kdb Q中的有效等联接

Kdb Q中的有效等联接,kdb,q-lang,Kdb,Q Lang,如何优化equijoin?表1有500000行,表2有200000行,我需要在它们之间进行相等联接。结果表应该有大约20000000行。目前运行大约需要20秒- ej[`key;Table1;Table2] 我在“键”列上尝试了一些属性,但没有成功 如果您的一个表有主键,并且在这个主键上进行了联接,那么lj应该比ej提供更好的结果。我建议试试 Table1 lj `key xkey Table2 键类型也很重要。如果键是char[],则在加入之前将其强制转换为symbol是值得的 E

如何优化equijoin?表1有500000行,表2有200000行,我需要在它们之间进行相等联接。结果表应该有大约20000000行。目前运行大约需要20秒-

ej[`key;Table1;Table2]

我在“键”列上尝试了一些属性,但没有成功

如果您的一个表有主键,并且在这个主键上进行了联接,那么
lj
应该比
ej
提供更好的结果。我建议试试

    Table1 lj `key xkey Table2

键类型也很重要。如果键是
char[]
,则在加入之前将其强制转换为symbol是值得的

Equi-join
ej
本质上与相同,但接受键列作为参数。您可以改为尝试
ij
,键入右侧表格:

Table1 ij `key xkey Table2

这会提高性能。

它真的那么慢吗?能否显示
元表1
元表2
的输出?在我的普通spec机器上,
ej
在大约1秒的时间内运行一些随机数据,结果是24413284行。我知道左连接速度会快得多,但我需要equi连接来获得两个表中的所有匹配对。键是符号或整数。若它们都并没有主键,我建议对它们中的每一个或两者应用分组,然后比较结果。类似于
ej['key;Table1;从Table2更新'g#key]
或ej['key;从Table1更新'g#key;从Table2更新'g#key]`。(在代码中,“backtick”被替换为',请替换为测试用的back)