kdb q - таблица групп внутри раздела - PullRequest
0 голосов
/ 25 апреля 2018

Начиная с нового раздела mydb Я сохраняю следующие три таблицы table1, table2, table3 в разделах 2018.01.01, 2018.01.02, 2018.01.03 соответственно:

npertable:10000000;

table1:([]date:npertable?2018.01.01+til 25;acc:npertable?`C123`C132`C321`C121`C131;c:npertable?til 100);
table2:([]date:npertable?2018.02.01+til 25;acc:npertable?`C123`C132`C321`C121`C131;c:npertable?til 100);
table3:([]date:npertable?2018.03.01+til 25;acc:npertable?`C123`C132`C321`C121`C131;c:npertable?til 100);

table1:`date xasc table1;
table2:`date xasc table2;
table3:`date xasc table3;

`:mydb/2018.01.01/t/ set .Q.en[`:mydb;table1];
`:mydb/2018.01.02/t/ set .Q.en[`:mydb;table2];
`:mydb/2018.01.03/t/ set .Q.en[`:mydb;table3];

Вы видите, что у меня есть разные группы acc, которые я позже выберу. Когда я сортирую таблицы перед сохранением дополнительно по acc, я получаю небольшое ускорение (253 против 391 миллисекунды). Так что, если я позже захочу запросить

select from t where date=2018.01.01, acc=`C123

сортирует по acc перед сохранением лучшего, что я могу сделать? Или в хранении разделов есть что-то, что создаст индекс для разных групп acc?

Спасибо за помощь

1 Ответ

0 голосов
/ 25 апреля 2018

Я думаю, что вы должны использовать атрибут parted для оптимизации ваших запросов. Например, вы можете использовать этот бит для сортировки по акк и применить атрибут.

{@[`acc xasc .Q.par[`:mydb;x;`t];`acc;`p#]}'[2018.01.01 2018.01.02 2018.01.03]

Подробнее о атрибуте parted и его эффектах вы можете прочитать в этом техническом документе KX -> https://kx.com/media/2017/11/Columnar_database_and_query_optimization.pdf

Также имейте в виду, что вы можете использовать месячный раздел в соответствии со своими потребностями. Если я правильно понимаю ваш пример, у вас есть year.day.month, поэтому вы можете уменьшить его до year.month, если день всегда будет 01 т.е. вместо использования

`:mydb/2018.01.01/t/ set .Q.en[`:mydb;table1];

Вы можете просто использовать

`:mydb/2018.01/t/ set .Q.en[`:mydb;table1];

Подробнее об этом можно узнать здесь -> https://code.kx.com/wiki/JB:KdbplusForMortals/partitioned_tables#1.3.7.2_Monthly

...