当我使用 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/