一句话定义:向量化执行(Vectorized Execution)是数据库的一种查询执行方式——把数据按列切成一批一批(通常几百到几千行),每次调用处理一整批,而不是一行一行地处理。
为什么会有它
最经典的执行方式是「逐行处理」(tuple-at-a-time,也叫 Volcano 模型):取一行、算一步、返回一行,循环往复。逻辑清晰、算子容易组合,但每一行都要经历一次函数调用和分支判断,真正的计算只占很小一部分时间,其余都花在「调用开销」上。
向量化执行换了个思路:把一批数据放进一段连续内存,一次调用就把整批算完。开销被摊薄到成千上万行上,同时带来两个额外好处——一是数据紧凑排列,CPU 缓存命中率更高;二是这种整齐的数据布局很适合 SIMD(单指令多数据)指令,一条指令同时算好几个值。
打个比方:逐行执行像超市收银员每扫一件商品就重新打印一次小票、重新和顾客确认一次;向量化执行则是把整筐商品放上传送带,机器一口气连续读完。
名字最容易混的地方
这里的「向量」指的是一批数据,和深度学习里的嵌入向量(embedding vector)只是撞名。
| 概念 | 处理对象 | 解决的问题 |
|---|---|---|
| 逐行执行 | 一行 | 简单灵活,但每行开销大 |
| 向量化执行 | 一批(数千行) | 摊薄开销、利用缓存与 SIMD |
| AI 词典:向量数据库">向量数据库 | 一条高维向量记录 | 相似度检索、近似最近邻 |
| SIMD | 一条 CPU 指令 | 指令级并行计算 |
一句话区分:向量化执行回答的是「怎么算」——批量算;向量数据库回答的是「存什么、怎么找」——存高维向量并做相似度检索。两者可以一起出现,也可以完全不相干。
对从业者意味着什么
分析型数据库(OLAP)里,扫描、过滤、聚合、分组这些操作天然适合批量处理,所以列存引擎普遍采用向量化执行,报表和看板因此刷新得更快。在 AI 场景里,RAG 或特征管道除了检索本身,往往还有大量 SQL 式的过滤、join、统计,如果底层引擎支持向量化,这部分会明显更顺。
需要留意两个常见误解:一是以为向量化执行等于「向量数据库」,其实毫无关系;二是以为它等于 GPU 加速,其实向量化执行主要发生在 CPU 上,是和 GPU 加速并列的另一条优化路线。具体某个引擎是否采用、采用到什么程度,以官方文档为准。
判断一个小技巧:看它的算子接口一次接收一行还是一批。一次一批的,基本就是向量化执行。
