分区表查询中count i为何比count sym执行速度更慢?
KDB+分区表中
count i与count sym查询性能差异问题解析 这个说法是属实的,核心原因在于虚拟列i和物理列sym的存储与处理逻辑存在本质差异:
i是KDB+的虚拟行索引列,它并不会实际存储在分区表的物理文件中。当执行select count i from tbl where date = .z.d-1时,KDB+需要为所有符合过滤条件的行动态生成这个虚拟列——也就是遍历匹配的每一行,逐个计算并生成对应的索引值,这个额外的生成过程会消耗更多计算资源和时间。sym是表中真实存在的物理列(通常这类列会和分区键关联,甚至会被建立索引优化查询)。执行select count sym from tbl where date = .z.d-1时,KDB+不需要生成任何额外数据,直接读取目标分区中已存储的sym列数据完成计数,整个过程基于现有物理存储,效率更高。
哪怕查询已经通过date过滤定位到单个分区,count i仍需完成虚拟列的生成步骤,而count sym直接利用物理列的现有数据,因此前者的查询速度会慢于后者。
内容的提问来源于stack exchange,提问作者Rezzy
相关产品推荐
相关产品推荐

