Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何提高kdb中选择的时间_Database_Kdb_Q Lang - Fatal编程技术网

Database 如何提高kdb中选择的时间

Database 如何提高kdb中选择的时间,database,kdb,q-lang,Database,Kdb,Q Lang,我已经在我的本地机器上创建了一个按日期划分的交易数据库 select from trade where date=x 大约需要100毫秒,但当我这样做时: select from trade where date=x,sym=`alpha 大约需要1-3秒 是否有我缺少的技巧(使用`g#sym会出现错误'par)。您可以使用dbmaint.q将属性应用于分区表。看见具体来看setattrcol函数。添加属性将显著加快查询速度。如果可能的话,我建议在id列上使用p。这对于查找应该更快,但维护起

我已经在我的本地机器上创建了一个按日期划分的交易数据库

select from trade where date=x
大约需要100毫秒,但当我这样做时:

select from trade where date=x,sym=`alpha
大约需要1-3秒


是否有我缺少的技巧(使用
`g#sym
会出现错误
'par
)。

您可以使用dbmaint.q将属性应用于分区表。看见具体来看setattrcol函数。添加属性将显著加快查询速度。如果可能的话,我建议在id列上使用p。这对于查找应该更快,但维护起来更困难。

我尝试了setattrcol[
:/kdb/testdb;
trade;
sym;
p]。它给了我一个类型错误。我用dbmaint.q给出的示例数据库进行了尝试,它工作得很好,但用我的示例数据库,它给出了一个类型错误。我试图检查在创建示例数据库时是否遗漏了一些内容。如果您知道任何明显的错误,请告知。您能给出表格的元数据吗?为了应用p#,您需要确保sym列的顺序正确,即每个sym的所有记录都在旁边。还有一件事,我相信你的上述呼吁,你不需要#。它应该是[:/kdb/testdb;trade;sym;p](带必要的背面标记)。元数据如下:日期“d”s trdId“f”sym“s”symType“s”expiration“d”option“s”corpAction“s”strike“f”time“v”price“f”数量“f”您是对的,它没有按符号分组。我需要做一个
g#吗。或者在将数据库写入磁盘之前,我应该在创建数据库的脚本中添加一个
g#。我只尝试了p(没有你提到的#),但它给了我一个u-fail错误。Studio提示:这个错误可能是指不能将
u#应用于数据(不是唯一的值),例如
u#1。在写入磁盘后设置属性。g#不需要任何维护,即更新不会删除该属性。如果您想使用p#,确保所有sym记录彼此相邻的最简单方法是排序,尽管如果是大型数据集,这需要一些时间。还需要对其进行排序,并在每次更新后重新应用属性。