使用不同的方法在DolphinDB中选择不同的列

时间:2019-05-31 09:45:26

标签: sql dolphindb

我一直在研究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))

然后,我使用以下三种方法来获取不同的值:

  1. 天真地检索不同的值。
distinctVal = select distinct(val) from t
  1. 首先检索所需的列,然后将distinct应用于结果。
val = exec val from t
distinctVal = distinct(val)
  1. 结合使用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实现用于类似的情况。

0 个答案:

没有答案
相关问题