kdb:从 table 中删除所有行的最佳方法

kdb: best way to delete all rows from a table

鉴于 table t:([c1:1 2]c2:3 4) 我遇到了两种清除其内容的方法:

t:0#t
delete from `t

两者除了选项(2)returns符号t外,还有其他区别吗?

返回的数据没有实际差异,只是运算速度略有不同。

q)b:([c1:1 2]c2:3 4)
q)\ts:1000000 delete from `b
644 720
q)a:([c1:1 2]c2:3 4)
q)\ts:1000000 a:0#a
195 944
q)b~a
1b

就您所做的计时测试而言,如果使用多次迭代,则不应重新分配 table。第一次迭代后,您丢失了数据,所以实际上它只从 table 中删除了一次。

q)n:100000000
q)tbl:([]a:til n;b:n?`3;c:n?1000.0)
q)\ts:3 0N!"Count tbl : ",string count tbl;tbl:0#tbl
"Count tbl : 100000000"
"Count tbl : 0"
"Count tbl : 0"
0 2544

用更多数据再做一次,只显示一次:

q)n:100000000    
q)tbl:([]a:til n;b:n?`3;c:n?1000.0)
q)\ts delete from `tbl
69 268435856
q)tbl:([]a:til n;b:n?`3;c:n?1000.0)
q).Q.gc[]
3489660928
q)\ts tbl:0#tbl
0 944

因此使用 :

重新分配看起来更有效