# 1. 列存格式的核心,按列存储带来的压缩率与向量化执行优势? A 列存适合点查与事务更新 B 列存不需要向量化执行 C 列存的压缩率一定低于行存 D 按列连续存储使同类型数据可高效压缩,且分析查询只读所需列、支持批量向量化处理,从而提升压缩率与执行效率 ✓ 正确答案
# 2. Parquet/ORC 的文件布局(row group、column chunk、page、footer 元数据)与谓词下推的读取流程 A 读取时需读取全部数据块再过滤 B footer 只存 schema,不存统计信息 C 文件按 row group/stripe、column chunk、page 分层,footer 存 min/max 等统计,谓词下推据此跳过不满足的块并只读所需列 ✓ 正确答案 D 谓词下推无法利用 min/max
# 3. 列存的压缩(LZ4/Zstd)与向量化读取协同 A 压缩后必须全部解压成行才能处理 B 按块解压(LZ4 快/Zstd 压缩率高,可配 SIMD 解压)得到连续列向量,只解压所需块,再向量化处理 ✓ 正确答案 C 压缩与向量化无关 D Zstd 一定比 LZ4 快
# 4. 列存的稀疏索引(min/max/bloom)过滤 A min/max 索引只能用于非过滤查询 B min/max 按块排除范围外数据,布隆过滤器精确排除等值不存在的块,二者协同提升谓词下推过滤效率 ✓ 正确答案 C 布隆过滤器能精确判断值一定存在 D 稀疏索引对每个值都建立索引
# 5. 向量化执行按批(batch)处理列数据的原理 A 向量化执行仍逐行处理数据 B 向量化引擎把一批行组织为列向量,在批次上批量运算,减少函数调用、提升缓存局部性与 SIMD 潜力 ✓ 正确答案 C 批处理与列向量无关 D 批处理会增加每行开销
# 6. 向量化执行消除虚函数与提升 ILP A 向量化用批量大函数与类型特化消除虚函数分派,并通过循环独立运算与 SIMD 提升指令级并行 ✓ 正确答案 B 虚函数分派开销很小,无需优化 C ILP 与向量化无关 D 消除虚函数会降低执行效率
# 7. 向量化执行利用 SIMD 指令加速比较/聚合 A SIMD 一次只能处理一个数据 B SIMD 只适用于字符串 C 利用连续同质的列向量,SIMD 一次比较/累加多个元素(生成掩码、多元素归约),显著提升比较与聚合吞吐 ✓ 正确答案 D SIMD 无法用于过滤
# 8. ClickHouse 的向量化与 data skipping index A ClickHouse 只有行存,无向量化 B data skipping index 会读取全部数据 C ClickHouse 用列存 + SIMD 向量化执行,并以 data skipping index(min/max、bloom 等)按 granule 跳过不满足谓词的块 ✓ 正确答案 D ClickHouse 不支持列压缩
# 9. StarRocks 的向量化执行与 CBO A StarRocks 用逐行解释执行,无优化器 B StarRocks 原生向量化引擎按批 SIMD 执行,CBO 基于统计信息选最低代价计划(join 顺序/算法、filter 下推),两者协同提升性能 ✓ 正确答案 C CBO 不需要统计信息 D 向量化与 CBO 相互冲突
# 10. 向量化的 null 处理与三值逻辑 A 向量化可以忽略 null 的三值逻辑 B null 无需位图表示 C 向量化用 validity bitmap 表示 null,并用位运算实现三值逻辑,对无 null 列走快速路径,兼顾正确性与性能 ✓ 正确答案 D 三值逻辑与 SQL 查询无关
# 11. 向量化执行的内存布局(列向量的连续内存) A 列向量用指针逐个指向分散的内存 B 列向量连续内存布局提升缓存局部性、兼容 SIMD 对齐与批量加载,是向量化高性能的基础 ✓ 正确答案 C 连续内存布局会降低缓存命中率 D 向量化不需要连续内存
# 12. 列存的编码,字典、RLE、Delta、Bitpacking A 所有编码都适用于所有数据 B 字典编码适合低基数列、RLE 适合连续重复、Delta 适合有序列、Bitpacking 适合低位宽整数,可组合使用 ✓ 正确答案 C RLE 适合高基数随机列 D Delta 编码对随机无序列压缩率最高
# 13. 列存的谓词下推与跳块(skip index) A 谓词下推只能作用于结果集 B 跳块需要读取全部数据才能判断 C 谓词下推到存储层后,用块级 min/max 与 bloom 元数据跳过不满足的块,只读取解码可能满足的数据 ✓ 正确答案 D 谓词下推与存储格式无关
# 14. 列存的写入放大与合并(compaction) A 列存适合频繁随机更新,无需合并 B 列存不支持写入 C compaction 只会增加文件数量 D 列存采用 append-only 与后台 compaction 合并小文件,用 size-tiered/leveled 策略平衡写放大与读放大 ✓ 正确答案
# 15. Parquet/ORC 的编码,字典、RLE、Delta 编码与谓词下推? A 编码后统计信息丢失,无法谓词下推 B 编码与谓词下推相互冲突 C 编码(字典/RLE/Delta)压缩存储但仍保留块级统计,谓词下推据此跳块,字典编码还可在字典层过滤 ✓ 正确答案 D 谓词下推必须逐行解码所有数据
# 16. 向量化执行引擎,SIMD 批量处理与火山模型逐行的性能差异? A 两者性能完全相同 B 向量化只对点查有效 C 火山模型比向量化快 D 向量化消除逐行虚函数分派、提升缓存局部性与 SIMD 并行,在分析查询上性能可达数量级提升 ✓ 正确答案
# 17. 向量化聚合与哈希 Join 的实现(radix 分区、SIMD 哈希表) A 哈希 Join 只能逐行探测 B 向量化聚合无法用 SIMD C radix 分区会降低缓存命中率 D 向量化聚合/join 用 SIMD 批量处理哈希与累加,radix 分区提升缓存命中,SIMD 哈希表加速探测与插入 ✓ 正确答案
# 18. 列存相比行存在分析查询的 IO 优势 A 列存和行存读取相同的数据量 B 列存只读所需列、压缩率高、可跳块,分析查询大幅减少 IO,优于行存整行读取 ✓ 正确答案 C 行存在分析查询时 IO 更少 D 列存无法压缩列数据
# 19. 列存在 HTAP 中的行存列存同步 A 行存与列存完全独立,无需同步 B 列存作为行存的衍生副本,通过复制/日志准实时同步,最终一致,兼顾分析性能与事务不阻塞 ✓ 正确答案 C 列存同步必须强一致,否则数据错误 D HTAP 不需要列存
# 20. 列存与行存的混合(PAX)布局 A PAX 是纯行存,无列存特性 B PAX 无法支持点查 C PAX 在行存页内按列存数据,兼得列式扫描的 IO 优势与行定位的事务友好性,适合宽表混合负载 ✓ 正确答案 D PAX 是纯列存,无行存特性
# 21. 向量化对比逐行解释执行的性能量级 A 两者性能完全相同 B 向量化消除逐行解释/虚函数开销并利用缓存与 SIMD,在扫描聚合场景性能通常相差约一个数量级甚至更高 ✓ 正确答案 C 解释执行在扫描场景更快 D 向量化性能提升不到 1 倍
# 22. 列存下的写路径,如何解决随机更新与小写入的性能问题? A 列存可以直接原地更新单个列单元 B 随机更新在列存中零成本 C 列存无法处理任何写入 D 列存通过写缓冲、append-only 与后台 compaction 把随机小写转为批量顺序写,配合读写分离解决随机更新性能问题 ✓ 正确答案
# 23. 嵌套类型(Struct/Array/Map)在列存中的存储与 flatten 优化 A 嵌套类型在列存中只能按行存储 B 嵌套类型用 def/rep level 或 offset 扁平化为平面列,flatten 拆出独立列与偏移,便于投影裁剪与向量化处理 ✓ 正确答案 C flatten 会丢失嵌套语义 D 嵌套类型无法在列存中压缩