当我使用子列表或take运算符(#)时从表中获取数据的子集时,大多数情况下take运算符的速度要比子列表函数慢。
查询后发表评论的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运算符要快。
但是,当我看到子列表的代码时,它在内部使用了take运算符,想知道子列表如何提高效率?
答案 0 :(得分:6)
用于计时这些操作的语法意味着您正在计时两个不同的操作。
\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次。通过我自己的测试,子列表和#给出了相似的时间。