2013-05-10 21 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