介绍一本好书《海量数据库解决方案》

介绍一本好书《海量数据库解决方案》

http://www.laoxiong.net/introducing-a-perfect-book.html

前几日收到好友崔华(dbsnake)给我寄来的《海量数据库解决方案》--一本来自韩国的数据库技术书籍,我随之以极大的兴趣投了入此已书的阅读之中。读了大部分内容之后,我觉得有必要在这里写一写,向大家介绍介绍一下此书。

其实在此前,我已经知道崔华在参与《海量数据库解决方案》一书的审校工作。有几次我们聊到这个事情,他提到经常要为此书工作到深更半夜,而对此他却告诉我说非常值得,因为这的确是一本值得引入国内的数据库技术书籍。他对我如此推崇此书,同时参与此书翻译审核还包括盖国强(eygle)张乐奕(kamus),这让我为对此书充满了期待,也坚信这本书的质量。

实际上关于本书的作者,在韩国有数据库泰斗之称的李华植,请恕我孤漏寡闻,我之前没有任何了解。也许是因为不是英语国家的缘故,导致我们对此缺乏了解。就像国内很少有Oracle高手专门写英文博客,或者在OTN上发表文章。通常我们知晓的国外Oracle大牛基本上来源于英语国家。而另一位来自于韩国的Oracle ACE, Dion Cho则是在WORDPRESS上开设了英文博客才被我们有所了解。(他同样有一本书在09年引入到了国内,《高级OWI与Oracle性能调整》,这其实是非常好的一本介绍Oracle等待事件以及调优化的书,不知道为什么在国内此书如此的默默无闻。而此书的翻译,丝毫不会让人感觉到是一本翻译的书,反而像是一本以中文为母语写就的Oracle技术书籍。)

拿到《海量数据库解决方案》一书,通过短短几页的阅读就足以使我对此书的翻译和审校质量有了很高的评价。这让我找回到了阅读《Expert Oracle Database Architecture 9i and 10g Programming Techniques and Solutions》(中文名《Oracle 9i&10 编程艺术-深入数据库体系结构》)和《高级OWI与Oracle性能调整》这样的书的感觉,完全没有翻译的生涩感。

从书名上看,开始时给了我一个误导。我开始以为是一本关于类似于数据仓库方面的,有关海量数据管理和性能方面的书。其实这是一本以Oracle为主的(大型)数据库性能方面的数据库技术书籍。与其他书动辄有十几二十几章节不同,这本400多页的厚厚的书仅仅只有6个章节,仅仅浓缩在几个与性能有关的最主要的主题方面。这不是一本大而全的泛泛而谈的书,也不是step by step的教科书。仅仅”SQL的执行计划“一章就有100多页的篇幅。就算我自认为对Oracle的执行计划有相当程度的理解,从这一章节中仍然获取了以往不曾想到或接触的执行计划方面的知识。而其他关于索引和表连接的章节,也花了相当多的笔墨。可以说,这是一本类似于大名鼎鼎的Thomas Kyle的《Expert Oracle Database Architecture 9i and 10g Programming Techniques and Solutions》的书,是让我们从原理上掌握数据库性能技术的书。而书中大量的比较,插图,让我们从原理上理解技术时,又避免了技术原理过于抽象的问题。这两本书都有一个共同点,虽然侧重于原理和本质,但并不是泛泛而谈,而是深入到技术细节。

这本书不仅适合于DBA,而我认为同样更适合于系统设计和开发人员。比如”构建索引的战略方案“一章内容,帮助我们在开发和设计系统阶段,如何有效设计索引,而不是在系统上线运行后,由于性能问题才去被动的增加索引。

虽然这本书以Oracle为主介绍海量(大型)数据库解决方案,但书中并没有提到Oracle特有的比如Latch、10046 trace、SGA结构这样的东西。因此,这本书同样适合于其他非Oracle数据库工作者。我相信,这些原理同样适用于其他关系型数据库。

之所以愿意为大家介绍这样一本书,是因为我希望Oracle技术社区能够有更多的人,能够吸取到更多的技术营养。如果以后有可能,我也希望能够把自己的更多的东西写出来,为Oracle技术社会贡献一点微薄的力量。

海量数据库解决方案》将整体内容分为两部分: 第1部分中以影响数据读取效率的所有要素为类别,对其各自的概念、原理、 特征、应用准则,以及表的结构特征、多样化的索引类型、优化器的内部作用、优化器为各种结果制定的执行计划予以详细说明,并以对优化器的正确理解为基础,提出对执行计划和执行速度产生最大影响的索引构建战略方案; 第2部分中主要介绍提高数据读取效率的具体战略方案,在这部分中介绍数据读取效率相关的局部范围扫描的原理和具体应用方法,以及对被认为是提高数据库使用效率基础的表连接的所有类型予以详细说明。   《海量数据库解决方案》系列丛书深受广大读者的喜爱已经长达10年之久,在被誉为“圣经”的同时,它已经变成了数据库用户不可或缺的必读书籍。作者竭力探求能够让it工作者在实际工作中轻松应用并掌控的巧妙方法,提供事半功倍的海量数据库解决之道。   《海量数据库解决方案》适合数据库开发人员和数据库管理员等阅读。 目录: 第1部分 影响数据读取的因素 第1章 数据的存储结构和特征1 1.1 表和索引分离型5 1.1.1 堆表的结构5 1.1.2 聚簇因子(cluster factor)10 1.1.3 影响读取的因素13 1.1.3.1 大范围数据读取的处理方案14 1.1.3.2 提高聚簇因子的手段17 1.2 索引组织表(index-organized table)19 1.2.1 堆表和索引组织表的比较19 1.2.2 索引组织表的结构和特征20 1.2.3 逻辑rowid和物理猜(physical guess)22 1.2.4 溢出区(overflow area)24 1.2.5 索引组织表的创建25 1.3 聚簇表26 1.3.1 聚簇表的概念27 1.3.2 单表聚簇29 1.3.3 复合表聚簇31 1.3.4 聚簇表的代价34 1.3.5 哈希聚簇39 .第2章 索引的类型和特征43 2.1 b-tree 索引44 2.1.1 b-tree 索引的结构44 2.1.2 b-tree 索引的应用47 2.1.3 反向键索引52 2.2 位图索引53 2.2.1 位图索引的形成背景54 2.2.2 位图索引的结构和特征55 2.2.3 位图索引的读取57 2.3 基于自定义的函数索引60 2.3.1 基于自定义的函数索引的概念和结构60 2.3.2 基于自定义函数索引的约束61 2.3.3 基于自定义函数索引的灵活运用64 第3章 sql的执行计划(explain plan)74 3.1 sql和优化器75 3.1.1 优化器的作用和人的作用77 3.1.2 优化器的类型80 3.1.2.1 基于规则的优化器82 3.1.2.2 基于成本的优化器86 3.1.2.3 优化器目标的选择93 3.1.2.4 执行计划的固定化方案97 3.1.2.5 优化器的局限103 3.1.3 优化器的最优化步骤106 3.1.4 查询语句的转换112 3.1.4.1 传递性规则113 3.1.4.2 视图合并(view merging)116 3.1.4.3 查看用户定义的绑定变量122 3.1.5 开发者的作用123 3.2 执行计划的类型126 3.2.1 扫描的基本类型126 3.2.1.1 全表扫描127 3.2.1.2 rowid扫描132 3.2.1.3 索引扫描133 3.2.1.4 b-tree聚簇读取(cluster access)138 3.2.1.5 哈希聚簇读取(hash cluster access)139 3.2.1.6 采样表扫描(sample table scan)140 3.2.2 表连接的执行计划143 3.2.2.1 嵌套循环连接(nested loops join)143 3.2.2.2 排序合并连接(sort merge join)146 3.2.2.3 哈希连接(hash join)148 3.2.2.4 半连接(semi join)149 3.2.2.5 笛卡儿连接151 3.2.2.6 外连接(outer join)154 3.2.2.7 索引连接159 3.2.3 其他运算方式的执行计划161 3.2.3.1 in-list迭代执行计划162 3.2.3.2 连锁执行计划163 3.2.3.3 远程执行计划165 3.2.3.4 排序操作执行计划168 3.2.3.5 集合操作执行计划171 3.2.3.6 count(stopkey)执行计划174 3.2.4 位图(bitmap)执行计划175 3.2.4.1 各种条件运算符的位图执行计划176 3.2.4.2 子查询执行计划182 3.2.4.3 与b-tree索引相结合的执行计划184 3.2.5 其他特殊处理的执行计划185 3.2.5.1 递归展开(recursive implosion)执行计划186 3.2.5.2 修改子查询执行计划191 3.2.5.3 特殊类型的执行计划193 3.3 执行计划的控制203 3.3.1 提示的活用准则204 3.3.2 使用提示实现最优化目标206 3.3.3 使用提示改变表连接顺序207 3.3.4 表连接方式选择过程中提示的使用208 3.3.5 并行操作中提示的使用209 3.3.6 数据读取方法选择中提示的使用211 3.3.7 查询转换(query transformation)过程中提示的使用214 3.3.8 其他提示216 第4章 构建索引的战略方案221 4.1 索引的选定准则222 4.1.1 不同类型表的索引应用准则223 4.1.2 离散度和损益分界点227 4.1.3 索引合并和组合索引的比较229 4.1.4 组合索引的特征232 4.1.5 组合索引中列序的决定准则239 4.1.6 索引选定步骤242 4.2 决定聚簇类型的准则263 4.2.1 全局性聚簇263 4.2.2 局部性聚簇265 4.2.3 单表聚簇266 4.2.4 单位聚簇大小的决定267 4.2.5 确保聚簇被使用的措施270 第2部分 最优化数据读取方案 第5章 局部范围扫描(partial range scan)274 5.1 局部范围扫描的概念276 5.2 局部范围扫描的应用原则281 5.2.1 局部范围扫描的条件281 5.2.2 不同优化器模式下的局部范围扫描284 5.3 提高局部范围扫描执行速度的原理285 5.4 向局部范围扫描引导的方法289 5.4.1 利用访问路径实现对sort的代替289 5.4.2 只使用索引的局部范围扫描292 5.4.3 min、max 的处理293 5.4.4 filter型局部范围扫描298 5.4.5 rownum的灵活运用300 5.4.6 利用嵌套视图的局部范围扫描306 5.4.7 利用函数的局部范围扫描308 5.4.8 利用查询语句二元化特性的局部范围扫描316 5.4.9 web留言板中的局部范围扫描318 第6章 表连接的最优化方案336 6.1 join和loop query的比较339 6.1.1 全部范围扫描方式下的比较341 6.1.2 局部范围扫描方式下的比较349 6.2 连接条件状态对表连接的影响351 6.2.1 连接条件正常353 6.2.2 连接条件一边异常358 6.2.3 连接条件两边异常361 6.3 各种表连接方式的特征及活用方案365 6.3.1 嵌套循环连接366 6.3.1.1 嵌套循环连接的基本概念367 6.3.1.2 嵌套循环连接顺序的决定370 6.3.2 排序合并连接379 6.3.3 嵌套循环连接和排序合并连接的比较383 6.3.4 哈希连接(hash join)387 6.3.4.1 in-memory哈希连接392 6.3.4.2 延迟哈希连接395 6.3.5 半连接(semi join)398 6.3.5.1 半连接的概念和特征399 6.3.5.2 半连接的执行计划401 6.3.6 星型(star)连接417 6.3.7 星变形(star transformation)连接425 6.3.8 位图连接索引436
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值