2013-05-10 3 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. Добавление атрибута значительно ускорит запрос. Я бы предложил использовать p # в столбце id, если это возможно. Это должно быть быстрее для поиска, но его сложнее поддерживать.

+0

Я попробовал setattrcol [':/kdb/testdb;' trade; 'sym;' p #]. Это дает мне ошибку типа. Я попробовал его с образцом db с dbmaint.q, и он работал нормально, но с моим образцом db он выдавал ошибку типа. Я пытаюсь проверить, не пропустил ли я что-то при создании образца db. если вы знаете какие-либо очевидные ошибки, посоветуйте PLS. –

+0

Можете ли вы дать мета таблицы? Чтобы применить p #, вам нужно убедиться, что столбец sym упорядочен правильно, т. Е. Все записи для каждого символа рядом друг с другом. Еще одна вещь, я верю в ваш звонок выше, вам не нужно #. должен быть просто [:/kdb/testdb; trade; sym; p] (с необходимыми обратными тиками). – user1895961

+0

Мета выглядит следующим образом: с \t т \t е \t дата \t "д" \t \t с trdId \t "F" \t \t сим \t "с" \t \t symType \t "с" \t \t экспирации \t "г" \t \t вариант \t "s" \t \t corpAction \t "с" \t \t удар \t "е" \t \t время \t "v" \t \t цена \t "е" \t \t количество \t "е" –