Comparison of sublist and take operator(#) in q kdb

Uts*_*Uts 4 kdb

While fetching a subset of data from a table when I use sublist or take operator(#), most of the times take operator is slow compared to sublist function.

5 observations posted in comment after querying table t in hdb which consists of 231131 rows and 71 cols.

\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
Run Code Online (Sandbox Code Playgroud)

With this small sample, it seems like sublist is faster as compared to take operator.
But when I see the code of sublist, it internally uses take operator, wondering how does sublist manage to be more efficient?

Cam*_*Kee 7

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

\t 10000 10 sublist select from t where date=.z.d-5 /Time taken - 62j 92j 68j  63j 65j
Run Code Online (Sandbox Code Playgroud)

此子列表操作显示了从第10000个条目开始的长度为10的切片。

\t 10000 10#select from t where date=.z.d-5 / Time taken - 544j 546j 567j 569j 585j
Run Code Online (Sandbox Code Playgroud)

#操作将返回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
Run Code Online (Sandbox Code Playgroud)

这将为每个功能计时10000次。根据我自己的测试,子列表和#给出了相似的时间。