kdb - q kdb中sublist和take operator(#)的比较

标签 kdb

当我使用 sublist 或 take operator(#) 从表中获取数据的子集时,与 sublist 函数相比,大多数情况下 take operator 很慢。

查询后发表在评论中的 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 似乎更快。
但是当我看到 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 和 # 给出了类似的时间。

关于kdb - q kdb中sublist和take operator(#)的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324656/

相关文章:

kdb - 查看 kdb 中当前和指定命名空间中的 View [] (\b) 行为

kdb - 如何显示 KDB 行大小?

kdb/q 为键控表中的不同键更新一列中的多个不同值

KDB/KX 在不读取整个文件的情况下将表附加到文件

kdb - 整数转换为给定基数

fifo - KDB:先进先出方式的pnl

kdb - 添加基于其他列的列 KDB+

java - 使用 qJava 写入 KDB

kdb:Where 短语 AND 性能

KDB+/Q 如何在函数内创建命名空间