- Нет атрибута
u#
, примененного к столбцу i
, чтобы увидеть это:
q)n:100000
q)t:([]a:`u#til n)
q)
q)\t:1000 select count distinct a from t
2
q)\t:1000 select count distinct i from t
536
Время этих запросов не является постоянным, естьпросто недостаточно значимых цифр, чтобы увидеть изменчивость.Использование
\ts:100 select last i from t where date=.z.d-5
выполнит запрос 100 раз и выделит, что время не является постоянным.
Первый запрос потребует выделить больше памяти для процесса q, который останется выделенным для процесса, если не будет вызвана сборка мусора (
.Q.gc[]
).Статистика использования памяти может быть просмотрена с помощью
.Q.w[]
.Например, в новом сеансе:
q).Q.w[]
used| 542704
heap| 67108864
peak| 67108864
wmax| 0
mmap| 0
mphy| 16827965440
syms| 1044
symw| 48993
q)
q)\t b: til 500000000
6569
q)
q).Q.w[]
used| 4295510048
heap| 4362076160
peak| 4362076160
wmax| 0
mmap| 0
mphy| 16827965440
syms| 1044
symw| 48993
q)
q)b:0
q)
q).Q.w[]
used| 542768
heap| 4362076160
peak| 4362076160
wmax| 0
mmap| 0
mphy| 16827965440
syms| 1044
symw| 48993
q)
q)\t b: til 500000000
877
q)
q).Q.w[]
used| 4295510048
heap| 4362076160
peak| 4362076160
wmax| 0
mmap| 0
mphy| 16827965440
syms| 1044
symw| 48993
Кроме того, предполагая, что рассматриваемая таблица разбита на разделы, показанный запрос будет заполнен .Q.pn
, который затем может быть использован для получения счетчика впоследствии, дляпример
q).Q.pn
quotes|
trades|
q)\ts select count i from quotes where date=2014.04.25
0 2656
q).Q.pn
quotes| 85204 100761 81724 88753 115685 125120 121458 97826 99577 82763
trades| ()
Более подробно .Q.ps
выполняет некоторые из операций select
под капотом.если вы посмотрите на 3-ю строку:
if[$[#c;0;(g:(. a)~,pf)|(. a)~,(#:;`i)];f:!a;j:dt[d]t;...
, это проверяет "a" (select
) часть запроса, и если это
(#:;`i)
(что является count i
) в итоге запускается .Q.dt
, который запускает .Q.cn
, который получает количество разделов.Поэтому, когда он запускается в первый раз, он запускает .Q.cn
, получая счетчик для всех разделов.В следующий раз, когда будет запущен .Q.cn
, он может просто посмотреть значения в словаре .Q.pn
, что намного быстрее.
См. Выше.
См. Выше об атрибутах i
.count
- это отдельная операция, не являющаяся частью запроса и не подверженная влиянию атрибутов столбцов, она будет видеть таблицу в виде списка.
Для таблиц на диске каждаястолбец должен содержать заголовок, в котором счетчик векторов доступен с очень небольшими затратами:
q)`:q set til 123
`:q
q)read1 `:q
0xfe200700000000007b000000000000000000000000000000010000000000000002000000000..
q)9#read1 `:q
0xfe200700000000007b
q)`int$last 9#read1 `:q
123i
q)
q)`:q set til 124
`:q
q)9#read1 `:q
0xfe200700000000007c
q)`int$last 9#read1 `:q
124i
Тем не менее, чтение любого файла обычно занимает минимум 1 мс, поэтому счетчик кэшируетсякак упомянуто выше.