1

我一直在研究 DolphinDB 查询,该查询旨在选择分区表中列的不同值。我尝试了三种不同的方法,它们表现出不同的性能。我想了解为什么会这样。

具体来说,我需要选择非分区列的不同值。我将给出一个最小的例子和我的三个实现。

为简单起见,我定义了一个内存分区表,它只包含两列和 10 个分区。我在其中插入了 100,000,000 行随机数据。

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应该始终将最快的实现用于类似的场景。

4

0 回答 0