From 5c80c818fd820bcb74f4427b74fade7d38e4e12f Mon Sep 17 00:00:00 2001 From: Yen-Kuang Lu Date: Thu, 25 Jan 2024 21:13:39 +0800 Subject: [PATCH] Update ch3.md reverse modification --- ch3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ch3.md b/ch3.md index d2e9c66..4de4c3a 100644 --- a/ch3.md +++ b/ch3.md @@ -524,7 +524,7 @@ WHERE product_sk = 31 AND store_sk = 3 对于需要扫描数百万行的数据仓库查询来说,一个巨大的瓶颈是从硬盘获取数据到内存的带宽。但是,这不是唯一的瓶颈。分析型数据库的开发人员还需要有效地利用内存到 CPU 缓存的带宽,避免 CPU 指令处理流水线中的分支预测错误和闲置等待,以及在现代 CPU 上使用单指令多数据(SIMD)指令来加速运算【59,60】。 -除了减少需要从硬盘加载的数据量以外,列式存储布局也可以有效利用 CPU 周期。例如,查询引擎可以将一整块压缩好的列数据放进 CPU 的 L1 缓存中,然后在紧密的循环(即没有函数调用)中遍历。相比于每条记录的处理都需要大量函数调用和条件判断的代码,CPU 执行这样一个循环要快得多。列压缩允许列中的更多行被同时放进容量有限的 L1 缓存。前面描述的按位 “与” 和 “或” 运算符可以被设计为直接对整块压缩列数据块操作。这种技术被称为矢量化处理(vectorized processing)【58,49】。 +除了减少需要从硬盘加载的数据量以外,列式存储布局也可以有效利用 CPU 周期。例如,查询引擎可以将一整块压缩好的列数据放进 CPU 的 L1 缓存中,然后在紧密的循环(即没有函数调用)中遍历。相比于每条记录的处理都需要大量函数调用和条件判断的代码,CPU 执行这样一个循环要快得多。列压缩允许列中的更多行被同时放进容量有限的 L1 缓存。前面描述的按位 “与” 和 “或” 运算符可以被设计为直接在这样的压缩列数据块上操作。这种技术被称为矢量化处理(vectorized processing)【58,49】。 ### 列式存储中的排序顺序