具体描述
正确使用Oracle数据库的索引不仅可以实现良好的性能,更重要的是能够创造出可伸缩的数据库应用程序。本书在介绍各种类型索引的过程中,始终围绕性能这一主线,透彻分析了为Oracle数据库创建和优化索引的方方面面。
本书三位作者都是经验丰富的Oracle数据库管理员,拥有创建、使用和维护索引的丰富经验。Darl Kuhn是Oracle公司高级数据库管理员,Sam R. Alapati是Cash美国国际公司高级数据库架构师,Bill Padfield则是丹佛一家大型电信公司的首席DBA。三位作者在合作撰写多本广受赞誉的Oracle图书之后再次联手,在这本专门探讨数据库索引的书里,将多年的实践经验和心得体会和盘托出。读者将在作者睿智、谨慎、敏锐的指引下,深入领会Oracle索引技术的精髓。
如果你是菜鸟,本书可助你迅速掌握Oracle索引技术;如果你是资深Oracle数据库管理员,本书可助你摆脱工作中相关问题的困扰。
作者简介
Darl Kuhn
Oracle公司高级数据库管理员,负责数据库管理从设计、开发到产品支持的各个方面。他还在美国科罗拉多的雷吉斯大学讲授高级数据库课程。另外,Darl还是落基山Oracle用户组的DBA志愿者,拥有美国科罗拉多州立大学研究生学位。
Sam R. Alapati
Oracle ACE,经验丰富的Oracle数据库管理员(Oracle Database11g OCP)。目前就职于得克萨斯州沃思堡的Cash美国国际公司,担任高级数据库架构师和经理。撰写过多本数据库管理方面的图书,包括《Oracle Database 11g数据库管理艺术》、《Oracle Database 11g性能优化攻略》,均已由人民邮电出版社翻译出版。
Bill Padfield
Oracle认证专家,具有近30年的IT行业从业经验,14年以上的Oracle数据库管理经验。目前他在科罗拉多州丹佛市的一家大型电信公司担任首席数据库管理员,协助控制和管理由75个数据库系统组成的大型数据仓库环境。同时,Bill也任教于雷吉斯大学,给研究生讲授数据库课程。
目录信息
1.1 用索引提高性能 2
1.2 确定使用哪种类型的索引 4
1.2.1 B树索引 5
1.2.2 特定的索引类型 7
1.3 确定需要建立索引的列 10
1.3.1 主键列和唯一键列的索引 11
1.3.2 外键列的索引 11
1.3.3 其他适合创建索引的列 12
1.4 索引指南 12
1.5 小结 13
第2章 B树索引 15
2.1 Oracle如何使用B树索引 15
2.1.1 场景一:所有的数据位于索引块 17
2.1.2 场景二:索引中不包含所有信息 19
2.1.3?场景三:只有表块被访问 20
2.2 准备创建B树索引 21
2.2.1 在创建前估计索引的大小 21
2.2.2 为索引创建单独的表空间 22
2.2.3 从表空间继承存储参数 23
2.2.4 命名标准 24
2.3 实现B树索引 24
2.3.1 创建B树索引 24
2.3.2 报告索引 25
2.3.3 显示创建索引的代码 26
2.3.4 删除B树索引 27
2.4 管理带约束的B树索引 28
2.4.1 在主键列上创建B树索引 29
2.4.2 在唯一键列上创建B树索引 33
2.4.3 索引外键列 36
2.5 小结 39
第3章 位图索引 40
3.1 位图索引 41
3.2 创建位图索引 44
3.3 创建分区的位图索引 45
3.4 在索引组织表上创建位图索引 45
3.5 位图索引对查询性能的影响 46
3.6 位图索引对数据载入性能的影响 50
3.7 了解位图连接索引 53
3.8 创建位图连接索引 54
3.9 报告位图索引 55
3.10 小结 55
第4章 索引组织表 56
4.1 索引组织表的结构 56
4.2 索引组织表的优势 57
4.3 创建索引组织表 58
4.4 添加溢出段 60
4.5 压缩索引组织表 62
4.6 构建二级索引 63
4.7 重建索引组织表 66
4.8 索引组织表报告 67
4.9 小结 68
第5章 专门索引 69
5.1 不可见索引 69
5.1.1 不可见索引的用途 69
5.1.2 创建不可见索引 70
5.1.3 在数据库中查找不可见索引 71
5.1.4 让优化器使用不可见索引 71
5.1.5 维护不可见索引 72
5.2 基于函数的索引 72
5.2.1 创建基于函数的索引 73
5.2.2 基于函数的索引的限制 76
5.2.3 收集基于函数的索引的统计信息 77
5.3 虚拟列上的索引 78
5.4 键压缩索引 80
5.4.1 键压缩的用途 81
5.4.2 创建压缩索引 82
5.4.3 键压缩和存储 84
5.5 复合索引 85
5.5.1 了解索引跳跃式扫描和复合索引 85
5.5.2 在复合索引中对列进行排列 86
5.5.3 为复合索引选择键 87
5.6 创建虚拟索引 89
5.7 反向键索引 91
5.7.1 反向键索引的缺点 92
5.7.2 反向键索引的用途 94
5.7.3 创建反向键索引 94
5.8 应用程序域索引 94
5.9 小结 95
第6章 分区索引 96
6.1 分区索引 96
6.2 创建本地分区索引 97
6.2.1 最简单的形式 97
6.2.2 分区级的需求 98
6.2.3 前缀和非前缀选项 99
6.3 管理主键和唯一索引 99
6.4 创建全局分区索引 101
6.5 为应用程序选择索引 105
6.6 维护分区表的索引 106
6.6.1 添加分区 106
6.6.2 截断分区 107
6.6.3 移动分区 108
6.6.4 拆分分区 108
6.6.5 交换分区 110
6.6.6 删除分区 111
6.6.7 合并分区 111
6.7 重建全局分区索引和非分区索引 112
6.8 把索引分区设置为不可用后重建 113
6.9 索引对间隔分区的影响 115
6.10 使旧的数据只读 116
6.11 报告分区索引 116
6.12 小结 118
第7章 索引使用调优 119
7.1 优化器访问路径 119
7.2 索引扫描 120
7.2.1 索引唯一扫描 120
7.2.2 索引范围扫描 121
7.2.3 索引跳跃式扫描 123
7.2.4 全索引扫描 124
7.2.5 索引快速全扫描 125
7.3 确定查询是否使用了索引 125
7.4 避免使用索引 127
7.4.1 在任何情况下都不使用某个索引 127
7.4.2 只避免快速扫描 128
7.4.3 强制表扫描 128
7.5 在索引和表扫描之间选择 128
7.6 优化器忽略索引的原因 129
7.6.1 不同的行数 129
7.6.2 索引聚簇因子 130
7.7 索引访问路径因没有新的统计信息而改变 131
7.7.1 使用不等条件 131
7.7.2 使用通配符查询 133
7.7.3 在谓词中引用空值 134
7.7.4 在查询中包含函数 135
7.7.5 跳过索引的前导部分 136
7.8 强制优化器使用索引 136
7.8.1 应用INDEX提示 137
7.8.2 应用相关的提示 138
7.8.3 对失败的索引提示进行诊断 139
7.8.4 调整optimizer_index_cost_adj参数 140
7.8.5 为索引收集准确的统计信息 142
7.9 并行化索引访问 143
7.10 小结 144
第8章 维护索引 145
8.1 收集索引统计信息 145
8.1.1 DBMS_STATS包 145
8.1.2 METHOD_OPT参数 147
8.2 处理不可用索引 148
8.2.1 使索引不可用 149
8.2.2 指定SKIP_UNUSABLE_INDEXES参数 150
8.3 管理索引使用的空间 153
8.3.1 重建索引以减少碎片 153
8.3.2 重建反向键索引 154
8.3.3 回收未使用的空间 154
8.3.4 重建分区索引 154
8.3.5 频繁重建索引 157
8.4 INDEX_STATS视图在重建索引时的作用 157
8.4.1 INDEX_STATS视图的优点 158
8.4.2 INDEX_STATS视图的问题 160
8.5 关于重建索引的争论 162
8.5.1 重建索引的理由 162
8.5.2 反对重建的理由 163
8.5.3 关于重建索引的建议 163
8.6 合并索引来减少碎片 164
8.7 收缩索引以减少碎片 165
8.8 移动表和索引 166
8.9 提高创建索引的效率 167
8.9.1 并行创建索引 167
8.9.2 避免在索引创建期间生成重做 168
8.9.3 使用较大的块 169
8.9.4 压缩索引 169
8.9.5 同时使用多个选项 170
8.10 生成DDL从而创建索引 170
8.10.1 使用DBMS_METADATA包 170
8.10.2 使用SESSION_TRANSFORM存储过程 171
8.10.3 使用SET_FILTER存储过程 172
8.10.4 使用数据泵 173
8.11 删除索引 173
8.12 小结 174
第9章 SQL调优顾问 176
9.1 工具之间的联系 176
9.2 自动SQL调优作业 178
9.2.1 验证自动作业在运行 178
9.2.2 查看自动SQL调优作业中的建议 179
9.2.3 生成SQL脚本来实施自动调优建议 181
9.2.4 禁用和启用自动SQL调优 182
9.3 管理SQL调优集 183
9.3.1 在AWR中查看占用大量资源的SQL 184
9.3.2 查看内存中使用大量资源的SQL 186
9.3.3 用AWR中占用大量资源的SQL填充SQL调优集 187
9.3.4 用内存中占用大量资源的SQL填充SQL调优集 188
9.3.5 用内存中所有的SQL来填充SQL调优集 189
9.3.6 显示SQL调优集的内容 190
9.3.7 选择性删除SQL调优集中的语句 192
9.3.8 将语句添加到现有的SQL调优集 193
9.3.9 删除SQL调优集 193
9.4 运行SQL调优顾问 193
9.4.1 创建调优任务 195
9.4.2 执行DBMS_SQLTUNE并查看建议 197
9.4.3 查看和删除调优任务 197
9.4.4 从SQL Developer中运行SQL调优顾问 197
9.4.5 从企业管理器运行SQL调优顾问 198
9.5 小结 199
第10章 SQL访问顾问 200
10.1 为单个SQL语句生成的建议 201
10.2 获得一组SQL语句的建议 203
10.3 查询顾问视图 209
10.4 小结 210
· · · · · · (收起)
读后感
全书对索引讲得很泛,大部分不是很深入 什么是索引,用来做什么 -> Oracle有几种索引,分别用在什么地方 -> 如何让索引正确实现 -> 如何优化、维护索引 后面两部分只有第7、8、9章在说,精华也全在第8章上
全书对索引讲得很泛,大部分不是很深入 什么是索引,用来做什么 -> Oracle有几种索引,分别用在什么地方 -> 如何让索引正确实现 -> 如何优化、维护索引 后面两部分只有第7、8、9章在说,精华也全在第8章上
全书对索引讲得很泛,大部分不是很深入 什么是索引,用来做什么 -> Oracle有几种索引,分别用在什么地方 -> 如何让索引正确实现 -> 如何优化、维护索引 后面两部分只有第7、8、9章在说,精华也全在第8章上
全书对索引讲得很泛,大部分不是很深入 什么是索引,用来做什么 -> Oracle有几种索引,分别用在什么地方 -> 如何让索引正确实现 -> 如何优化、维护索引 后面两部分只有第7、8、9章在说,精华也全在第8章上
全书对索引讲得很泛,大部分不是很深入 什么是索引,用来做什么 -> Oracle有几种索引,分别用在什么地方 -> 如何让索引正确实现 -> 如何优化、维护索引 后面两部分只有第7、8、9章在说,精华也全在第8章上
用户评价
这本书的文字风格非常独特,它有一种老派工程师的浪漫——崇尚精确、推崇效率,对一切模糊不清的概念都抱有警惕。与其他市面上强调“快速入门”或“实战演练”的书籍不同,这本书更像是一部严谨的学术专著,但好在,它的所有理论推导都紧密地锚定在实际的性能指标和优化实践上。我尤其喜欢其中穿插的**“性能陷阱剖析”**部分,它不是简单地列出“不要做什么”,而是深入到数据库内核层面,解释“为什么这样做会导致性能下降”。例如,作者对特定谓词下索引扫描效率变化的分析,引用了大量的内部统计数据作为支撑,使得即便是那些看起来非常主观的优化建议,也变得有据可依。这本书在对**“成本模型估算”**的论述上,展现了极高的水准,它让我明白了,SQL优化绝不仅仅是调整几个Hint那么简单,而是一场对查询规划器决策逻辑的深刻理解和引导。对于那些想从“会写SQL”跃升到“能调优数据库”的人来说,这本书提供的视角是革命性的。
如果要用一个词来形容这本书带给我的核心感受,那就是“深度”。它不像某些流行的技术书籍那样,为了迎合市场需求而把内容切割得过于碎片化,导致读者在学完一系列“技巧”后仍然感到知识体系是零散的。这本书的架构是自洽且完备的,它从最基础的物理存储开始,层层向上构建起逻辑访问层,其中的每一个组件——无论是内存缓冲区管理、事务日志,还是并行查询的调度机制——都得到了连贯而充分的阐述。我个人尤其受益于它对**“数据一致性维护”**那几章的详尽讨论,它不仅解释了ACID的含义,更深入剖析了在多核、分布式架构下,如何通过复杂的机制(如MVCC的变体、日志恢复流程)来保证这些承诺的兑现。这本书不是让你学几个命令就能解决问题的,它是让你建立起一个完整的、系统化的知识框架,让你在面对任何新的数据库技术演进时,都能迅速找到其理论基石的参照物。这是一本需要反复阅读,并随着自身经验增长而不断有新体会的“工具书”。
这本书,从头到尾都给人一种沉甸甸的、扎实的感觉,就好像你手里捧着的是一本武林秘籍,而不是一本普通的教科书。作者在讲解每一个概念时,都用了极其详尽的笔墨,恨不得把底层的实现原理都给你剖析得一干二净。举个例子,光是讲到一个简单的 B+ 树结构,就能引出好几个相关的优化策略和性能瓶颈分析,读起来完全不像是在看枯燥的理论,更像是在跟随一位经验丰富的老前辈,一步步拆解一个复杂的机械装置,每一个齿轮的咬合、每一个轴承的运转,都交代得清清楚楚。特别欣赏作者在处理那些“灰色地带”时的那种严谨态度,不像有些书籍只会给出一个理想化的模型,这本书会直面现实世界中数据分布不均、索引碎片化等棘手问题,并给出切实可行的规避或缓解方案。我花了很长时间才啃完其中的数据结构和内存管理章节,那种仿佛自己也参与了底层设计的成就感,是其他数据库书籍无法给予的。如果你真的想弄明白“为什么”而不是仅仅记住“是什么”,那么这本书绝对是案头必备的工具。
这本书的排版和图示设计,坦白讲,不属于那种“赏心悦目”的范畴,它更偏向于信息密度最大化,字体和图表的复杂程度,要求读者必须保持高度集中的注意力。它不是那种可以让你窝在沙发上轻松阅读的书籍,更适合在安静的书桌前,配备好笔记本和大量草稿纸。然而,一旦你适应了这种风格,你会发现其图示的精妙之处。特别是关于**“数据页的内部布局”**的剖析图,它不再是教科书上那种简化的方块图,而是详细展示了槽位指针、记录头、行溢出处理的复杂结构。这种对底层细节的执着,使得我们在面对生产环境中的疑难杂症时,有了一个更可靠的“透视图”。读完这本书,你对数据库的信任度会大幅提升,因为它把那些隐藏在“黑箱”里的机制,用最直接、最不加修饰的方式呈现在你面前。它培养的是一种“追根究底”的工程师精神。
说实话,这本书的阅读体验是极富挑战性的,它更像是为那些已经对关系型数据库有一定基础,并渴望深入挖掘其内部机制的“硬核”读者准备的。它没有采用那种引导性的、层层递进的教学方式,更像是把一个完整的、高度复杂的系统直接摆在了你的面前,然后期待你自行去梳理其中的脉络。我记得在读到关于**“锁粒度与并发控制”**的那一章时,我不得不频繁地停下来,对照着我们项目组最近遇到的死锁问题反复研读。作者对不同隔离级别下可能出现的数据不一致现象的描述,细致入微到令人发指,每一个并发事务的交错执行路径都被模拟得淋漓尽致。这使得我能清晰地看到,我们过去采用的那种“一刀切”的解决方案,在某些特定场景下是多么的脆弱。这本书的价值在于,它强迫你去思考,而不是被动接受。读完之后,你对数据库的敬畏之心会油然而生,因为你才真正体会到,在那些毫秒级的响应背后,隐藏着多么精妙和复杂的工程博弈。
相当一般,对于索引类型和SQL条有那么一点点的讲解,但是不够深入,属于入门级
相当一般,对于索引类型和SQL条有那么一点点的讲解,但是不够深入,属于入门级
相当一般,对于索引类型和SQL条有那么一点点的讲解,但是不够深入,属于入门级
讲的不是很清楚,比较笼统
相当一般,对于索引类型和SQL条有那么一点点的讲解,但是不够深入,属于入门级