我一直在研究DolphinDB查询,该查询旨在选择分区表中列的不同值。我尝试了三种不同的方法,它们表现出不同的性能。我想了解为什么会这样。
具体地说,我需要选择一个非分区列的不同值。我将给出一个最小的示例以及我的三个实现。
为简单起见,我定义了一个内存中的分区表,该表仅包含两列和10个分区。然后我向其中插入了1亿行随机数据。
partitionNum = 10
db = database("", VALUE, 0..(partitionNum - 1))
t = db.createPartitionedTable(table(1000:0, `id`val, [INT,INT]), `t, `id)
n = 100000000
insert into t values(rand(partitionNum, n), rand(10000000, n))
然后,我使用以下三种方法来获取不同的值:
distinctVal = select distinct(val) from t
distinct
应用于结果。val = exec val from t
distinctVal = distinct(val)
group by
关键字和first
聚合函数。distinctVal = select first(val) from t group by val
然后我用timer
来测量经过时间:
timer {
distinctVal = select distinct(val) from t
}
// Time elapsed: 14761.95 ms
timer {
val = exec val from t
distinctVal = distinct(val)
}
// Time elapsed: 8269.531 ms
timer {
distinctVal = select first(val) from t group by val
}
// Time elapsed: 3481.814 ms
我想了解为什么它们的性能如此不同,以及是否应始终将最快的group by
实现用于类似的情况。