如果我在没有指定日期的情况下在大型历史数据库上运行此查询,KDB是否足够智能从索引中检索状态值而不是将数据库关闭?
select distinct status from trades
答案 0 :(得分:3)
要使用索引进行检索,kdb提供了'g#'属性。单独区分可能需要更多时间,这取决于您的表的大小(它将是没有`g#属性的线性搜索)。
检查此 - > http://code.kx.com/q4m3/8_Tables/#88-attributes
让我们看一下简单的例子:
q) a: 10000000#1 2 3 5
q) b:`g#a
q) \ts distinct a
68 134217888
q) \ts distinct b
0 288
差异表明g# attribute makes a lot of difference in time and space taken during searching. It is because
g#属性在向量上创建并维护索引。
答案 1 :(得分:3)
kdb可能告诉所有不同状态的唯一方法是从每个分区读取。是的,这将占用大量内存,但除非您自己想要维护所有不同状态的缓存,否则您无法做任何事情。如前所述,一个属性会加快查询速度,但查询时间仍然只会随着分区数量而缩放。