Brin Index主Greenplum 7中的理论与实现
1.04 MB
32 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pdf | 3 |
摘要 | ||
Brin Index是一种基于块范围的索引技术,适用于大型表且具有特定数据分布特性的场景。在Greenplum7中,Brin Index针对AppendOnly表进行了优化实现。其存储结构包括Revmap数组,用于记录块的最大和最小元组值,帮助过滤不符合条件的数据块。性能测试表明,Brin Index在一定区间选择性查询中表现出较高效率,特别是在数据块数量较大且选择性较低时尤为明显。实现中,Block Number通过计算上级数组索引位置,Revmap通过模运算确定偏移量。Brin Index的优势在于块级过滤能力和较低的存储开销,适合不愿大量存储索引空间的应用场景。 | ||
AI总结 | ||
以下是对文档《Brin Index在Greenplum 7中的理论与实现》的总结:
### 1. Brin Index 简介
Brin Index(Block Range Index)是一种存储数据块中元组字段的最大和最小值的索引结构,用于过滤不符合查询条件的数据块,减少查询的数据读取量。
### 2. Brin Index 的存储机制
- **Revmap**:是一个逻辑上的数组,数组下标代表数据块编号(BlockNumber),值是TID(指向存储有最大最小值的元组)。
- **存储方式**:通过BlockNumber计算上层数组的索引(upper_index)和Revmap的偏移量(revmap_offset),即:
- `upper_index = blocknum / TidNumPerPage`
- `revmap_offset = blocknum % TidNumPerPage`
### 3. Brin Index 的实现
- 适用于AppendOnly Table(append-only表)。
- 支持列存储,减少存储开销。
### 4. 使用场景
- 表非常大。
- 数据具有分布特性。
- 不希望在索引上占用过多存储空间。
### 5. 性能测试
- 测试场景:创建列存储表并插入1,000,000条数据,创建Brin索引和B-tree索引。
- `create table aocs(a int, b int) with(appendonly=true, ORIENTATION = column);`
- `insert into aocs select i,i from generate_series(1,10000000)i;`
- `create index abidx on ao using brin(b) with(pages_per_range=1);`
- `create index atidx on ao using btree(b);`
- 结果:Brin Index在选择率极低时性能优于B-tree索引(查询选择率为1%时,Brin Index的选择率为1 - (1 - 0.000045))。
### 6. 结论
Brin Index适合大表、分布有特性且需要节省存储空间的场景,能够显著提升查询效率。 |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
25 页请下载阅读 -
文档评分