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
因此使用 :
重新分配看起来更有效
鉴于 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
因此使用 :
重新分配看起来更有效