qkdb中子列表和take运算符(#)的比较

qkdb中子列表和take运算符(#)的比较,kdb,Kdb,当我使用sublist或take运算符(#)时,从表中提取数据子集时,大多数情况下take运算符比sublist函数慢 5查询后在评论中发表的意见 hdb中的表t由231131行和71列组成 \t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j 63j 65j \t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 54

当我使用sublist或take运算符(#)时,从表中提取数据子集时,大多数情况下take运算符比sublist函数慢

5查询后在评论中发表的意见 hdb中的表t由231131行和71列组成

\t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j 
\t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j
对于这个小样本,子列表似乎比take运算符更快。

但是当我看到sublist的代码时,它在内部使用take运算符,不知道sublist是如何提高效率的?

您用于计时操作的语法意味着您正在计时两个不同的操作

\t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j
此子列表操作显示从第10000个条目开始的长度为10的切片

\t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j
此#操作将返回10000行,每个行由select函数结果中的10行组成

你可能想做的是:

\t:10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j 
\t:10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j
这将为每个函数计时10000次。根据我自己的测试,sublist和#给出了类似的计时