2013-05-10 19 views
2

我在本地机器上创建了一个按日期分区的交易数据库。如何提高在kdb中选择的时间

select from trade where date=x 

大约需要100毫秒,但是当我做:

select from trade where date=x,sym=`alpha 

需要花费约1〜3秒。

有没有我错过的技巧(使用`g#sym给出错误'par)。

回答

1

您可以使用dbmaint.q将属性应用于分区表。请参阅here。特别看看setattrcol函数。添加属性会显着加快查询速度。如果可能,我会建议在id列上使用p#。查找速度应该更快,但更难维护。

+0

我试过setattrcol [':/ kdb/testdb;'trade;'sym;'p#]。它给我一个类型错误。我试着用dbmaint.q给出的样本数据库,它工作正常,但与我的样本数据库它给出了类型的错误。我正在尝试检查是否在创建样本数据库时错过了某些内容。如果你知道任何明显的错误,请告知。 – 2013-05-11 09:29:32

+0

你可以给表的元?为了应用p#,您需要确保sym列的顺序正确,即每个sym的所有记录彼此相邻。还有一件事,我相信你上面的电话,你不需要#。应该只是[:/ kdb/testdb; trade; sym; p](带有必要的反标)。 – user1895961 2013-05-11 12:51:31

+0

元是如下所示:c\t吨\t˚F\t一个 日期\t “d” \t \t小号 trdId \t “F” \t \t 符号\t “S” \t \t symType \t “S” \t \t 期满\t “d” \t \t 选项\t “S” \t \t corpAction \t “S” \t \t 罢工\t “F” \t \t 时间\t “V” \t \t 价格\t “F” \t \t 量\t “F” – 2013-05-11 14:38:05