《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。
《数据库索引设计与优化》适用于已经具备了SQL 这一关系型语言相关知识,希望通过理解SQL 性能相关的内容,或者希望通过了解如何有效地设计表和索引而从中获益的人员。另外,《数据库索引设计与优化》也同样适用于希望对新硬件的引入所可能带来的变化做出更好判断的资深人士。
第1 章 概述 ........................ 1
关于SQL 性能的另一本书 ......... 1
不合适的索引 .............................. 3
误区和误解 ........... 4
误区1:索引层级不要超过5 层 ...................... 5
误区2:单表的索引数不要超过6 个 ............... 6
误区3:不应该索引不稳定的列 ...................... 6
示例..... 7
磁盘驱动器使用率 .............. 7
系统化的索引设计 ...................... 8
第2章 表和索引结构 ........ 10
介绍 .......... 10
索引页和表页 .................... 11
索引行 ...... 11
索引结构... 12
表行 .......... 12
缓冲池和磁盘I/O ...................... 12
从DBMS 缓冲池进行的读取 .......................... 13
从磁盘驱动器进行的随机I/O ......................... 13
从磁盘服务器缓存进行的读取 ....................... 14
从磁盘驱动器进行的顺序读取 ....................... 15
辅助式随机读 .................... 15
辅助式顺序读 .................... 18
同步I/O 和异步I/O ........... 18
硬件特性... 19
DBMS 特性 ............................... 20
页 ...... 20
表聚簇 ................................ 21
索引行 ................................ 21
表行... 22
索引组织表 ........................ 22
页邻接 ................................ 23
B 树索引的替代品 ............. 24
聚簇的许多含义 ................ 25
第3 章 SQL 处理过程 ....... 27
简介 .......... 27
谓词 .......... 27
评注... 28
优化器及访问路径 .................... 28
索引片及匹配列 ................ 29
索引过滤及过滤列 ............ 29
访问路径术语 .................... 31
监控优化器 ........................ 32
帮助优化器(统计信息) . 32
帮助优化器(FETCH 调用的次数) .............. 32
何时确定访问路径 ............ 33
过滤因子... 34
组合谓词的过滤因子 ......... 35
过滤因子对索引设计的影响 ........................... 37
物化结果集 ................................ 39
游标回顾 ............................ 39
方式1:一次FETCH 调用物化一条记录 ...... 40
方式2:提前物化 ............. 41
数据库设计人员必须牢记 . 41
练习 .......... 41
第4 章 为SELETE 语句创建理想的索引 ........ 43
简介 .......... 43
磁盘及CPU 时间的基础假设 ... 44
不合适的索引 ............................ 44
三星索引——查询语句的理想索引 ....................... 45
星级是如何给定的 ............ 46
范围谓词和三星索引 ......... 48
为查询语句设计最佳索引的算法 ........................... 49
候选A ................................ 50
候选B ................................ 50
现今排序速度很快——为什么我们还需要候选B .......................... 51
需要为所有查询语句都设计理想索引吗 ................ 52
完全多余的索引 ................ 52
近乎多余的索引 ................ 53
可能多余的索引 ................ 53
新增一个索引的代价 ................ 54
响应时间 ............................ 54
磁盘负载 ............................ 55
磁盘空间 ............................ 56
一些建议... 57
练习 .......... 58
第5 章 前瞻性的索引设计 . 59
发现不合适的索引 .................... 59
基本问题法(BQ) ................... 59
注意... 60
快速上限估算法(QUBE) ...... 61
服务时间 ............................ 62
排队时间 ............................ 62
基本概念:访问 ................ 63
计算访问次数 .................... 65
FETCH 处理....................... 66
主要访问路径的QUBE 示例 .......................... 67
使用满足需求的成本最低的索引还是所能达到的最优索引:示例1 ..... 72
该事务的基本问题 ............ 73
对该事务上限的快速估算 . 73
使用满足需求的成本最低的索引还是所能达到的最优索引 .......... 74
该事务的最佳索引 ............ 75
半宽索引(最大化索引过滤) ....................... 75
宽索引(只需访问索引) . 76
使用满足需求的成本最低的索引还是所能达到的最优索引:示例2 .... 77
范围事务的BQ 及QUBE .. 78
该事务的最佳索引 ............ 79
半宽索引(最大化索引过滤) ....................... 80
宽索引(只需访问索引) . 81
何时使用QUBE ........................ 82
第6 章 影响索引设计过程的因素 .................... 83
I/O 时间估算的验证 .................. 83
多个窄索引片 ............................ 84
简单就是美(和安全) ..... 86
困难谓词... 87
LIKE 谓词 .......................... 87
OR 操作符和布尔谓词 ...... 88
IN 谓词............................... 89
过滤因子隐患 ............................ 90
过滤因子隐患的例子 ................ 92
最佳索引 ............................ 95
半宽索引(最大化索引过滤) ....................... 96
宽索引(只需访问索引) . 97
总结... 97
练习 .......... 99
第7 章 被动式索引设计 .. 100
简介 ........ 100
EXPLAIN 描述了所选择的访问路径 ................... 101
全表扫描或全索引扫描 ... 101
对结果集排序 .................. 101
成本估算 .......................... 102
数据库管理系统特定的EXPLAIN 选项及限制 ............................ 102
监视揭示现实 .......................... 103
性能监视器的演进 .......... 104
LRT 级别的异常监视 .............. 106
程序粒度的均值是不够的 ............................. 106
异常报告举例:每个尖刺一行 ..................... 106
问题制造者和受害者 ....... 108
有优化空间的问题制造者和无优化空间的问题制造者 ................ 108
有优化空间的问题制造者 ............................. 109
调优的潜在空间 .............. 111
无优化空间的问题制造者 ............................. 114
受害者 .............................. 115
查找慢的SQL 调用 ......... 117
调用级别的异常监视 .............. 118
Oracle 举例 ...................... 121
SQL Server 举例 .............. 123
结论. 125
数据库管理系统特定的监视问题 ......................... 126
尖刺报告 .......................... 127
练习 ........ 127
第8 章 为表连接设计索引 ............................. 129
简介 ........ 129
两个简单的表连接 .................. 131
例8.1:CUST 表作为外层表 ........................ 131
例8.2:INVOICE 表作为外层表 .................. 132
表访问顺序对索引设计的影响 ............................. 133
案例研究 .......................... 133
现有索引 .......................... 136
理想索引 .......................... 142
理想索引,每事务物化一屏结果集 .............. 146
理想索引,每事务物化一屏结果集且遇到FF 缺陷 ..................... 149
基本连接的问题(BJQ) ........ 151
结论:嵌套循环连接 ....... 153
预测表的访问顺序 .................. 153
合并扫描连接和哈希连接 ....... 155
合并扫描连接 .................. 155
例8.3:合并扫描连接 ..... 155
哈希连接 .......................... 157
程序C:由优化器选择MS/HJ(在现有索引条件下) ................ 158
理想索引 .......................... 159
嵌套循环连接VS. MS/HJ 及理想索引 ................. 161
嵌套循环连接VS. MS/HJ ...........161
嵌套循环连接VS.理想索引 .......................... 162
连接两张以上的表 .................. 163
为什么连接的性能表现较差 ... 166
模糊的索引设计 .............. 166
优化器可能选择错误的表访问路径 .............. 166
乐观的表设计 .................. 166
为子查询设计索引 .................. 167
为UNION 语句设计索引 ........ 167
对于表设计的思考 .................. 167
冗余数据 .......................... 167
无意识的表设计 .............. 171
练习 ........ 173
第9 章 星型连接 ............. 175
介绍 ........ 175
维度表的索引设计 .................. 177
表访问顺序的影响 .................. 178
事实表的索引 .......................... 179
汇总表 .... 182
第10 章 多索引访问 ....... 184
简介 ........ 184
索引与 .... 184
与查询表一同使用索引与 ............................. 186
多索引访问和事实数据表 ............................. 187
用位图索引进行多索引访问 ......................... 187
索引或 .... 188
索引连接. 189
练习 ........ 190
第11 章 索引和索引重组 191
B 树索引的物理结构 ............... 191
DBMS 如何查找索引行 .......... 192
插入一行时会发生什么 .......... 193
叶子页的分裂严重吗 .............. 194
什么时候应该对索引进行重组 ............................. 196
插入模式 .......................... 196
索引列的稳定性 ...................... 205
长索引行............207
举例:对顺序敏感的批处理任务 ......................... 208
表乱序(存在聚簇索引) ............................. 211
表乱序(没有以CNO 开头的聚簇索引) .... 212
存储在叶子页中的表行 .......... 212
SQL Server ....................... 212
Oracle ............................... 213
索引重组的代价 ...................... 214
分裂的监控 .............................. 215
总结 ........ 216
第12 章 数据库管理系统相关的索引限制 ..... 219
简介 ........ 219
索引列的数量 .......................... 219
索引列的总长度 ...................... 220
变长列 .... 220
单表索引数量上限 .................. 220
索引大小上限 .......................... 220
索引锁定. 221
索引行压缩 .............................. 221
数据库管理系统索引创建举例 ............................. 222
第13 章 数据库索引选项 224
简介 ........ 224
索引行压缩 .............................. 224
索引键以外的其他索引列 ....... 225
唯一约束 ........... 227
从不同的方向扫描数据库索引 ............................. 227
索引键截断 .............................. 228
基于函数的索引 ...................... 228
索引跳跃式扫描 ...................... 229
块索引 .... 230
数据分区的二级索引 .............. 230
练习 ........ 231
第14 章 优化器不是完美的 ........................... 232
简介 ........ 232
优化器并不总能看见最佳方案 ............................. 234
匹配及过滤问题 .............. 234
非BT 谓词 ....................... 234
无法避免的排序 .............. 237
不必要的表访问 .............. 238
优化器的成本估算可能错得离谱 ......................... 239
使用绑定变量的范围谓词 ............................. 239
偏斜分布 .......................... 241
相关列 .............................. 242
部分索引键的警示故事 ... 243
成本估算公式 .......................... 246
估算I/O 时间 ................... 247
估算CPU 时间 ................. 248
协助优化器处理估算相关的问题 ................. 249
优化器的问题是否会影响索引设计 ..................... 252
练习 ........ 253
第15 章 其他评估事项 .... 254
QUBE 公式背后的假设条件 ... 254
内存中的非叶子索引页 .......... 255
例子. 255
磁盘服务器读缓存的影响 ............................. 256
缓冲子池 .......................... 258
长记录 .............................. 259
慢速顺序读 ...................... 259
实际的响应时间可能比QUBE 评估值短得多 ..... 259
叶子页和表页缓存在缓冲池中 ..................... 260
识别低成本的随机访问 ... 262
辅助式随机读取 .............. 262
辅助式顺序读 .................. 265
评估CPU 时间(CQUBE) .... 265
单次顺序访问的CPU 时间 ........................... 265
单次随机访问的CPU 时间 ........................... 267
单次FETCH 调用的CPU 时间 ..................... 269
每排序一行的平均CPU 时间........................ 270
CPU 评估举例 ......................... 270
宽索引还是理想索引 ....... 270
嵌套循环(及反范式化)还是MS/HJ.......... 271
合并扫描与哈希连接的比较 ......................... 274
跳跃式顺序扫描 .............. 275
CPU 时间仍然不可忽视 .. 276
第16 章 组织索引设计过程 ........................... 277
简介 ........ 277
计算机辅助式索引设计 .......... 278
设计出色索引的9 个步骤 ....... 280
参考文献 ........................... 282
术语表 ................ 283
索引 ................291
《吉姆·罗杰斯投资精要》内容简介:吉姆·罗杰斯,量子基金联合创始人,被誉为“富有远见的国际投资家”。他与巴菲特、索罗斯齐名
在1955-1968年乌尔姆设计学院办学期间,没有人能预料到这所规模不大、位置偏僻且历史短暂的学校,会有如此大的影响力。乌尔姆设计
《家国情怀 知行合一》内容简介:郑杭生先生作为改革开放后中国社会学重建的重要领导人和新时期中国社会学理论的重要开拓者,不仅为
《背包为家》内容简介:本书是儿童文学著名作家张国龙新近创作的一本随笔美文集,共分为背包回家、遥想他乡、天涯情旅三卷,其中所
《TTT5.0培训师的大脑》内容简介:TTT技术自20世纪90年代进入中国培训市场,历经20多年的发展,几经迭代,已然进入TTT5.0阶段——大
多模式多尺度数据融合理论及其应用 内容简介 《多模式多尺度数据融合理论及其应用》首先针对一类不可重复测量的物理量,如时间、飞行器的位置、姿态及惯性参数等,建立多...
《小创客趣玩microbit开发板编程》内容简介:本书定位于“编程入门与实践指南”,适合所有喜爱编程的青少年朋友阅读。书中对micro:
GPS导航原理与应用 本书特色 本书阐述了GPS导航及其应用的基本原理,全书共分为十章。前三章介绍了全球定位系统(GPS)的发展概况、系统的构成、导航定位的时空...
《飞盘运动》内容简介:本文首先对飞盘运动的起源与发展的进行了回顾,其次对飞盘运动的各种玩法进行了简单的介绍。另外本著作重点
《电子封装技术设备操作手册》内容简介:本书以电子封装工艺为主线,按照电子封装工艺的前道封装与后道封装,分成了半导体芯片封装
《东线:决战第聂伯河》内容简介:《东线》系列丛书,由有名军事作家朱世巍先生撰写。它全面而详细地讲述了二战中苏德战争的整个过
中文版InDesign CS5技术大全-(附光盘) 本书特色 超厚手册,超大容量,技术全面,39章教学内容,软件功能全覆盖,基础详解、功能全面、理论实践全接触,...
《世界经典口琴小品111首》内容简介:口琴,是人们喜闻乐见的一件乐器,拥有广泛的群众基础。然而在乐谱市场中,高质量的口琴乐谱极
《坚定信心,共创吉林通信的美好未来》内容简介:本书分为上、下两篇:上篇为《管理篇》,均为结合当时重点管理工作研究方向所著,
《人人都该懂的科学简史》内容简介:什么是科学与科学家?科学的未来将去往何方? 科学革命如何从无到有?为什么说蒸汽机是工业革命
中文版3ds Max 2016完全自学教程 本书特色 本书是一本全面介绍中文版3ds Max 2016基本功能及实际运用的书。本书完全针对零基础读者编写,是入门...
《人机交互》是学习人机交互课程的教材,介绍了人机交互的发展历史、人机交互技术、交互设备、交互系统设计方法及交互系统评估等
本书全面系统地介绍了无线移动自组织网(简称自组网)的特点、发展、关键技术和研究热点等内容。全书共分18章。第1章概要介绍无线通
《微信营销与运营攻略》内容简介:《微信营销与运营攻略》由国内微信营销与运营领域的3位领军人物撰写,旨在为企业微信营销与运营提
《上海企业教育实务研究》内容简介:企业教育是在企业这个特定的工作领域内,由企业所开展的、以满足企业内需和战略发展为主的各类