应用于QKDB中表中“i”列的属性-性能

应用于QKDB中表中“i”列的属性-性能,kdb,Kdb,当我在下面运行查询以获取表的计数时,运行查询所需的大小和时间几乎相同表t有97029条记录和124列COL 问题1-下面查询中的列i是否在内部使用unique属性来使用has函数以恒定时间返回输出 \ts select last i from t where date=.z.d-5 / 3j, 1313248j / time taken to run the query and memory used is always same not matter how many times we ru

当我在下面运行查询以获取表的计数时,运行查询所需的大小和时间几乎相同表t有97029条记录和124列COL

问题1-下面查询中的列i是否在内部使用unique属性来使用has函数以恒定时间返回输出

\ts select last i from t where date=.z.d-5 / 3j, 1313248j 
/ time taken to run the query and memory used is always same not matter how many times we run same query
当我运行以下查询时: 第一次所需的时间和内存非常高,但从下一次运行开始,所需的时间和内存非常少

问题2。当我们第一次运行查询并显示下一次缓存的输出时,kdb是否缓存输出

Q.3在运行下面的查询时,是否在列i上应用了属性,如果是,那么是哪一个

\ts select count i from t where date=.z.d-5 / 1512j, 67292448j
\ts select count i from t where date=.z.d-5 / 0j, 2160j
运行以下查询时: Q.4在运行下面的查询时,是否有任何属性应用于列i

\ts count select from t where date=.z.d-5 / 184j, 37292448j 
 /time taken to run the query and memory used is always same not matter how many times we run 
Q.5以下哪项查询应用于获取记录数非常高的表列?是否有任何其他查询可以更快、更少地消耗内存以获得相同的结果

i列没有应用u属性,请参见: 这些查询的时间不是固定的,只是没有足够的重要数据来观察变化。使用

\ts:100 select last i from t where date=.z.d-5
将运行查询100次,并突出显示时间不是恒定的

第一个查询将请求为q进程分配更多的内存,除非调用垃圾收集,否则这些内存将一直分配给该进程。q.gc[]。可以使用.Q.w[]查看内存使用情况统计信息。例如,在新会话中: 另外,假设所讨论的表是分区的,那么所显示的查询将填充.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在引擎盖下执行一些选择操作。如果你看第三行:

if[$[#c;0;(g:(. a)~,pf)|(. a)~,(#:;`i)];f:!a;j:dt[d]t;...
这将检查查询的选择部分,以及它是否正确

(#:;`i)
它最后运行.Q.dt,它运行.Q.cn,它获取分区计数。所以第一次运行它时,它运行.Q.cn,获取所有分区的计数。下一次运行.Q.cn时,它只需在dictionary.Q.pn中查找值,速度要快得多

见上文

请参见上文关于i上的属性。计数是一个单独的操作,不是查询的一部分,并且不会受到列属性的影响,它会将表视为列表

对于磁盘上的表,每列应包含一个标头,在该标头中,向量的计数可以以很少的费用获得:

尽管如此,读取任何文件通常至少需要1毫秒,因此计数会如上所述进行缓存

i列没有应用u属性,请参见: 这些查询的时间不是固定的,只是没有足够的重要数据来观察变化。使用

\ts:100 select last i from t where date=.z.d-5
将运行查询100次,并突出显示时间不是恒定的

第一个查询将请求为q进程分配更多的内存,除非调用垃圾收集,否则这些内存将一直分配给该进程。q.gc[]。可以使用.Q.w[]查看内存使用情况统计信息。例如,在新会话中: 另外,假设所讨论的表是分区的,那么所显示的查询将填充.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在引擎盖下执行一些选择操作。如果你看第三行:

if[$[#c;0;(g:(. a)~,pf)|(. a)~,(#:;`i)];f:!a;j:dt[d]t;...
这将检查查询的选择部分,以及它是否正确

(#:;`i)
它最后运行.Q.dt,它运行.Q.cn,它获取分区计数。所以第一次运行它时,它运行.Q.cn,获取所有分区的计数。下一次运行.Q.cn时,它只需在dictionary.Q.pn中查找值,速度要快得多

见上文

请参见上文关于i上的属性。计数是一个单独的操作,不是查询的一部分,并且不会受到列属性的影响,它会将表视为列表

对于磁盘上的表,每列应包含一个标头,在该标头中,向量的计数可以以很少的费用获得:

尽管如此,读取任何文件通常至少需要1毫秒,因此计数会如上所述进行缓存