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

Sql 使用不同的方法在DolphinDB中选择不同的列,sql,dolphindb,Sql,Dolphindb,我一直在研究一个DolphinDB查询,其目的是在分区表中选择列的不同值。我尝试了三种不同的方法,它们表现出不同的性能。我想知道为什么会这样 具体来说,我需要选择非分区列的不同值。我将给出一个简单的示例和我的三个实现 为了简单起见,我定义了一个内存分区表,它只包含两列和10个分区。我在其中插入了100000000行随机数据 partitionNum = 10 db = database("", VALUE, 0..(partitionNum - 1)) t = db.createPartitio

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

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

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

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))
然后,我使用以下三种方法获得不同的值:

  • 天真地检索不同的值
  • 首先检索所需的列,并对结果应用
    distinct
  • 分组依据
    关键字与
    第一个
    聚合函数结合使用
  • 我用定时器来测量经过的时间:

    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
    
    我想了解为什么它们的性能如此不同,以及是否应该在类似的场景中始终使用最快的
    groupby
    实现

    val = exec val from t
    distinctVal = distinct(val)
    
    distinctVal = select first(val) from t group by val
    
    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