第1章 物理数据库设计概况 1
1.1 动机——数据增长和与日俱增的物理数据库设计 1
1.2 数据库生命周期 4
1.3 物理设计的元素:索引、分区和群集 5
1.3.1 索引 6
1.3.2 物化视图 7
1.3.3 分区和多维群集 7
1.3.4 物理数据库设计的其他方法 7
1.4 物理设计为什么这么困难 8
1.5 文献综述 9
第2章 基本索引方法 10
2.1 B+树索引 10
2.2 复杂的索引检索 14
2.2.1 复杂索引方法 16
2.2.2 表扫描 16
2.3 位图索引 17
2.4 记录标识符 18
2.5 小结 18
2.6 文献综述 19
第3章 查询优化和方案选择 20
3.1 查询过程和优化 20
3.2 有用的数据库优化特性 20
3.2.1 查询转换和重写 21
3.2.2 查询执行计划视图 21
3.2.3 柱状图 21
3.2.4 查询执行计划提示 21
3.2.5 优化深度 22
3.3 查询成本估计——一个例子 22
3.3.1 查询案例3.1 22
3.4 查询执行计划开发 27
3.4.1 查询执行计划的转换规则 27
3.4.2 查询执行计划的重构算法 28
3.5 选择因素、表规模和查询成本估算 28
3.5.1 估算一个选择操作或预期的选择性因素 28
3.5.2 直方图 29
3.5.3 估算关联的选择性因素 30
3.5.4 查询案例3.2 30
3.5.5 估算查询执行计划表大小的例子 32
3.6 小结 32
3.7 文献综述 33
第4章 选择索引 34
4.1 索引的概念及术语 34
4.1.1 基本索引类型 34
4.1.2 索引的访问方法 35
4.2 索引的经验规则 35
4.3 索引选择决策 37
4.4 连接索引选择 40
4.4.1 嵌套循环连接 40
4.4.2 块嵌套连接 42
4.4.3 索引嵌套循环连接 42
4.4.4 合并排序连接 43
4.4.5 哈希连接 44
4.5 小结 45
4.6 文献综述 46
第5章 物化视图选择 47
5.1 简单视图物化 48
5.2 使用通用性 51
5.3 使用分组和归纳 56
5.4 资源的一些注意事项 57
5.5 实例:“好的”、“差的”以及“可怕的” 59
5.6 使用语法和范例 62
5.7 小结 64
5.8 文献综述 64
第6章 无共享分区 65
6.1 理解无共享分区 65
6.1.1 无共享系统架构 65
6.1.2 为什么无共享架构会受到追捧 67
6.2 更多关键概念和术语 67
6.3 哈希分区 68
6.4 无共享架构的优缺点 69
6.5 无共享架构在OLTP系统中的使用 71
6.6 设计的挑战:偏斜与连接配置搭配 73
6.6.1 数据偏斜 73
6.6.2 配置搭配 74
6.7 降低节点间数据传送的数据库设计技巧 74
6.7.1 谨慎分区 74
6.7.2 物化视图复制以及其他复制技术 75
6.7.3 节点间互联 78
6.8 拓扑设计 79
6.8.1 使用节点的子集 79
6.8.2 逻辑节点与物理节点 81
6.9 资金去向 81
6.10 网格计算 82
6.11 小结 83
6.12 文献综述 84
第7章 范围分区 85
7.1 范围分区基础 85
7.2 列表分区 86
7.2.1 列表分区基础 86
7.2.2 范围分区和列表分区组合 87
7.3 语法示例 87
7.4 管理以及快速Roll-in、Roll-out 89
7.4.1 隔离工具 89
7.4.2 R0ll-in和Roll-out 90
7.5 增强寻址能力 91
7.6 分区消除 91
7.7 索引范围分区数据 94
7.8 范围分区和群集索引 94
7.9 完整的形态:使用多维群集混合范围和哈希分区 95
7.10 小结 96
7.11 文献综述 97
第8章 多维群集 98
8.1 了解MDC 99
8.1.1 为什么群集这么有帮助 99
8.1.2 MDC 100
8.1.3 创建MDC表的语法格式 103
8.2 MDC的性能优势 103
8.3 不仅仅是查询性能:转入(Roll-in)和转出(Roll-out)的设计 105
8.4 MDC的查询优势实例 106
8.5 存储研究 107
8.6 设计MDC表 109
8.6.1 用粗糙度限制存储扩展 109
8.6.2 MDC利用的单调性 111
8.6.3 选择合适的维度 112
8.7 小结 113
8.8 文献综述 114
第9章 相互依赖的问题 115
9.1 强弱关联分析 115
9.2 过程优先的瀑布策略 117
9.3 效果优先的瀑布策略 117
9.4 变更管理的贪婪算法 118
9.5 流行的策略(鸡汤算法) 119
9.6 小结 120
9.7 文献综述 121
第10章 物理设计探索中的计数和数据抽样 122
10.1 应用物理数据库设计 122
10.1.1 索引设计的计数 124
10.1.2 物化视图设计的计数 124
10.1.3 多维群集的计数 125
10.1.4 无共享分区设计的计数 126
10.2 抽样功能 127
10.2.1 使用SQL抽样的好处 127
10.2.2 数据库设计的抽样 128
10.2.3 抽样类型 131
10.2.4 重复性抽样 133
10.3 一个明显的限制 133
10.4 小结 134
10.5 文献综述 135
第11章 查询执行计划和物理设计 137
11.1 从查询文本获取到结果集 137
11.2 查询执行计划究竟是什么样 140
11.3 非图形化的Explain 141
11.4 浏览查询执行计划以改进数据库设计 144
11.5 用于改进物理数据库设计的查询执行计划标示符 149
11.6 不更改数据库的探索 151
11.7 当查询优化器选择失误时强制执行 151
11.7.1 3种基本策略 151
11.7.2 查询提示简介 152
11.7.3 当SQL不能被修改时的查询提示 154
11.8 小结 156
11.9 文献综述 156
第12章 自动化物理数据库设计 157
12.1 如果假设分析、索引以及其他 158
12.2 Oracle、DB2以及SQL Server的自动化设计功能 161
12.2.1 IBM DB2 Design Advisor 162
12.2.2 Microsoft SQL Server Database Tuning Advisor 166
12.2.3 Oracle SQL Access Advisor 169
12.3 使用分组和泛化 171
12.4 可扩展性以及工作负荷的压缩 172
12.5 测试系统与生产系统之间的设计探索 175
12.6 出版文献中的一些实验性结果 176
12.7 索引选择 179
12.8 物化视图选择 180
12.9 多维群集选择 182
12.10 无共享分区 183
12.11 范围分区设计 184
12.12 小结 186
12.13 文献综述 186
第13章 实质探讨:服务器资源和拓扑 188
13.1 需要了解的有关CPU架构以及发展趋势的内容 189
13.1.1 CPU性能 189
13.1.2 使用并行处理加速系统的阿姆达尔定律 191
13.1.3 多核CPU 192
13.2 客户机服务器架构 192
13.3 对称多处理器与NUMA 194
13.3.1 对称多处理器与NUMA概述 194
13.3.2 缓存一致性与伪共享 195
13.4 服务器群集 195
13.5 关于操作系统的一般知识 195
13.6 存储系统 196
13.6.1 磁盘、轴以及分割 197
13.6.2 存储区域网络与网络连接存储设备 198
13.7 利用RAID使存储既可靠又快捷 199
13.7.1 RAID的历史 199
13.7.2 RAID 0 200
13.7.3 RAID 1 200
13.7.4 RAID 2以及RAID 3 201
13.7.5 RAID 4 202
13.7.6 RAID 5以及RAID 6 202
13.7.7 RAID 1+0 203
13.7.8 RAID 0+1 204
13.7.9 RAID 10+0以及RAID 5+0 204
13.7.10 哪种RAID最适合数据库的需求 205
13.8 在数据库服务器中均衡资源 206
13.9 可用性以及恢复策略 206
13.10 主内存与数据库调整 210
13.10.1 人工内存调整 210
13.10.2 自动内存调整 212
13.10.3 技术前沿:自调整内存管理的最新策略 215
13.11 小结 224
13.12 文献综述 224
第14章 决策支持、数据仓库和OLAP系统中的物理设计 226
14.1 什么是OLAP 226
14.2 维度层次结构 228
14.3 星型模式和雪花模式 229
14.4 仓库与集市 230
14.5 按比例扩大系统 233
14.6 在DSS、仓库以及OLAP设计中的注意事项 234
14.7 主流数据库服务器的使用语法以及例子 235
14.7.1 Oracle 235
14.7.2 Microsoft分析服务 236
14.8 小结 238
14.9 文献综述 238
第15章 逆规范化 240
15.1 有关规范化的基础知识 240
15.2 逆规范化的常见类型 243
15.2.1 一一对应关系中的实体 243
15.2.2 一对多关系中的实体 244
15.3 表逆规范化策略 246
15.4 逆规范化的例子 246
15.4.1 需求规格 247
15.4.2 逻辑设计 247
15.4.3 使用逆规范化进行模式优化 249
15.5 小结 252
15.6 文献综述 252
第16章 分布式数据分配 253
16.1 引言 253
16.2 分布式数据库分配 255
16.3 复制数据分配——“最有益站点”方法 256
16.4 渐进表分配方法 260
16.5 小结 261
16.6 文献综述 261
附录A 一个简单的性能模型数据库 263
A.1 I/O时间成本——单独块访问 263
A.2 I/O时间成本——表扫描和排序 263
A.3 网络时间延迟 264
A.4 CPU时间延迟 264
附录B Oracle Data Guard与DB2 HADR的数据库灾难恢复技术比较 265
B.1 在故障转移期间备用始终保持其“热”度 266
B.2 快速故障转移 266
B.3 地域分离 266
B.4 支持多种备用服务器 266
B.5 支持在备用服务器上的读取 267
B.6 主服务器在故障转移后可以很容易重建 267
参考书目 268