海量数据库解决方案

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://jdaudhwy.blogbus.com/logs/82826797.html

【书名】海量数据库解决方案

【作者】[韩]李华植著;郑保卫盖国强译

【ISBN】978-7-121-11883-8

【出版社】电子产业出版社

【出版日期】2011年1月

【宣传语】

涵盖数据库专家最新核心技术的RDBMS经典书籍

包含了将代码缩减为原来的1/10倍而速度进步至原来10倍的先进方法。

揭开了关系数据库的真面目,展示了截至目前为止未能被灵活使用的新技术。

【内容简介】

本书将整体内容分为两部分,在第1部分中以影响数据读取效率的所有要素为种别,对其各自的概念、原理、特征、应用准则,以及表的结构特征、多样化的索引类型、优化器的内部作用、优化器为各种结果制定的执行计划予以具体说明,并以对优化器的正确理解为基础,提出对执行计划和执行速度产生最大影响的索引构建战略方案;在第2部分中主要先容进步数据读取效率的具体战略方案,在这部分中先容与数据读取效率相关的局部范围扫描的原理和具体应用方法,以及对被以为是进步数据库使用效率基础的表连接的所有类型予以具体说明。

《海量数据库解决方案》系列丛书深受广大读者的喜爱已经长达10年之久,在被誉为“圣经”的同时,它已经变成了数据库用户不可或缺的必读书籍。作者竭力探求能够让IT工作者在实际工作中轻松应用并掌控的巧妙方法,提供事半功倍的海量数据库解决之道。

本书适合数据库开发职员和数据库治理员等阅读。

作者序言

这已经是第四次为本书写作者序言了,此时此刻过往20年的生活如同电影般在我的脑海里逐一擦过。当我最初决定步进IT领域时就为自己立下了誓言,时至本日回想起多年走过的历程,其间布满了艰辛,也正是这无数的艰辛让我终极体验了收获的愉悦。

回看这20多年的足迹,我一直努力用新的视角往观察他人所忽视的领域,尝试用崭新的思维和布满创意的双手往耕耘。尽管如此,也仍然无法紧跟IT技术飞快的发展步伐。我为实现理想而终日不停前行的脚步,固然忙碌但却无穷满足。

众所周知,能够加工成宝石的原石比比皆是,一分耕耘,一分收获,每当我们初次接触某个新的东西时都会或多或少有些紧张。因此从这一层面来看,数据库散发着无穷的魅力,它如同渊博精深的智者般质朴,总是以真实、坦诚的心往面对每一位学习和研究它的人。

在过往并不短暂的岁月里我一直深信数据库的骨骼就是“数据”,并为这一理论的发展不断努力,吸收同仁们分享的经验而持续奋斗。为了打破始终在理论表面徘徊的固有模式而不断寻求新的尝试,并试图探求能够让IT工作者在实际工作中轻松应用并掌控的巧妙方法。

这种巧妙方法不能是只通过经验和试验才能获得的,它必须是利用日经常识就可以理解说明的方法。有这么一句话“会者不难,难者不会”,假如能够把一些复杂的理论与通俗浅显的常知趣结合,那么不仅有利于人们的理解,更有利于人们在合适的情况下加以灵活运用。相反,有这么一句话“一知半解以为是”,意思是指那些只观其表不观其里就加以相信的人。

很多程序员只忠实地相信自己的经验,当问及为何如此时,大部分人的答案都是“由于我那样做过”或“那样比较好”。10种类型的原理可以组合出10的阶乘(3628800)种现象,那么100种类型的原理所能够表现出来的现象数可以以为是一个天文数字。

如若仅凭经验往思考题目,无论怎么努力,终极也只能获得其中一部分的原理而已。然而,事实上我们是完全有能力深刻地理解这100种原理的。但假如不试图进行深刻钻研而只停留在表面,终极只能是一无所获。宝石是不会被轻易发现的,只有凭借最大的努力往寻找方能找到。

在不知不觉中当我们碰到了从表面上看无法解决的复杂题目时,会出现两种人:其一,是坚持不懈、彻夜不休也要寻找到最佳解决办法的人,这种人通过不懈的努力终极能够获得什么呢?事实上随着岁月的流逝,他们终将成为众人皆知的专家;其二,是以为过于烦琐,直接予以放弃的人,这种人只会让自己的血汗变成廉价的废弃物。

可以自豪地说“我付出了凡人所无法想象的艰辛”,为了寻求完美的真理舍弃了很多凡人的生活。在没有钓到鱼时钓鱼人也许会为此而耿耿于怀,但在我看来题目的关键在于没有寻找到有效的钓鱼方法。假如钓鱼人能够充分理解我的想法,并甘愿为了改变自己的固有观念而付出较大努力,尽管他也可能会为此而花费大量的时间和心血,但坚信他一定能够获得别人所无法获得的成果。假如他研究出了别人所无法研究出的钓鱼方法,那么从此就再也不用为钓不到鱼而担心了。

各位读者在工作的同时究竟是否一直在使用一种平凡的方法呢?还是为了解决明天必须要完成的任务而临时抱佛脚呢?现在该到结束这种恶性循环的时候了。应用程序实在就是处理数据的手段而已,它需要紧跟流行的步伐,如不及时进行更新,在不经意之间就已经落伍了。

然而数据和数据库并非如此,不论岁月如何流失,我们积攒起来的“内功”是不会消失的。假如能对其原理有一个深刻的理解,那么不论何时何地都能够为所欲为地钓到很多鱼。随着数据库技术的发展进步,能够精确执行指令的DBMS与日俱增,随着对DBMS应用能力的不同所获得的性能差异使我们从技术中获得满足感。

不知不觉中《海量数据库解决方案》系列丛书深受广大读者的喜爱已经长达10年之久,在被誉为“圣经”的同时,它已经变成了数据库用户不可或缺的必读书籍。截至本日,本书依旧深受广大读者的喜爱。

IT领域技术10年的发展状况与其他领域100年的发展状况相当,在数据库的发展历程中,有一些技术和原理被不断更新,有一些技术和原理被直接替换,也有一些技术和原理始终被维持使用。其中能够被持续使用而没有被改进的,说明它们是完美的,是适应性非常强的。

然而,我并没能及时将数据库所提供的新功能的真正含义和特性,及其在实际工作中的灵活运用方法和准则先容给各位读者,借这次机会向各位忠实的读者表示深深的歉意。我知道很多读者对这本新书寄予了厚看,相信通过我的努力能够让各位读者如愿以偿。

事实上,本人在此期间为了研究数据架构(DataArchitecture)的相关理论花费了大量的时间和精力,由于我以为数据架构的重要性和根本性主要体现在它是搜集和治理数据体系的理论,它的目的在于以数据库技术为基础,构建更加深邃、全面的数据体系。现在,有很多用户开始对数据构建的相关理论感爱好,并且一些用户还组织了专门的学习小组,我为此而感到非常欣慰。

随着信息化进程的不断加快,利用数据库所要治理的数据不仅会明显增多,而且也会变得非常复杂,由此而引发的数据合并、标准化、数据质量等方面的题目也已经到了不得不解决的境地了,实际上可以说是迫在眉睫。因此,构建以监视数据构架是否按照要求构建、完善对数据进行有效控制的元数据系统,已经成了我们所必须完成的迫切任务。

幸运的是,很多开发职员和治理职员都对数据构架注进了极大的关心,韩国政府为此专门设置了数据构架资格考试,也正是由于国家和各位IT领域从业者的努力才使得数据构架有了今天的良好发展形势。为了使其得到进一步的发展,我们为此而研究出了更为体系化的理论方法,出版了高质量的书籍,设置了高标准的培训课程,构建出了将数据构架解决方案和相关组件相结合的元数据系统。

然而,在我为了推进数据构架的发展而付出大量时间和精力的同时,并没有放弃对数据库的研究。在此期间,我不仅连续不断地向很多用户提供数据库的咨询工作,而且也在不断地研究着新出现的技术。固然我并没有公然地出版新书,但是却编写了大量的研究材料,并将其中相当大一部分在公司韩国数据库振兴院的主页上公然发表。尽管如此,现在对数据库的深刻研究,并将这些材料系统化的工作已经迫在眉睫了。

经过一年的昼夜工作终于完成了本书,并为了在本书中涵盖所有DBMS的“最小公倍数”而付出了很大的努力。固然在各个DBMS之间多少都有一些差异,但是假如从原理和灵活运用准则的角度来看,它们之间实在并没有太大的差异。如若对所有DBMS的功能进行具体说明,反倒不利于各位读者的理解,所以在本书中以Oracle为基准进行说明的部分比较多。

尽管在本书中所使用的描述方法和命令语言主要以Oracle为基准,但所说明的原理和概念适用于所有的DBMS,这就像尽管每一个照相机的具体操纵方法都有所不同,但从拍摄照片的角度来看却并没有太大的差异一样。为了帮助各位读者更好地理解和应用本书中所先容的原理和方法,先容其被应用在各个不同DBMS中的相关书籍在不久的将来将呈现给各位读者。

本书将整体内容分为两个部分,在第1部分中以影响数据读取效率的所有要素为种别,对其各自的概念、原理、特征、应用准则,以及表的结构特征、多样化的索引类型、优化器的内部作用、优化器为各种结果制定的执行计划予以具体说明,并以对优化器的正确理解为基础,提出了对执行计划和执行速度产生最大影响的索引构建战略方案。

在第2部分中主要先容进步数据读取效率的具体战略方案。在这部分中,先容与数据读取效率相关的局部范围扫描的原理和具体应用方法,以及对被以为是进步数据库使用效率基础的表连接的所有类型予以具体说明。

在第1部分的第1章中,主要对数据库在存储数据时所使用的基本存储结构进行具体说明。就像人类无法生活在水中,鱼类无法生活在陆地一样,结构上的特征对很多方面都有着根本性、决定性的影响。尽管不同的DBMS所使用的术语有所不同,但是当我们依据其本质进行分类时就会发现所有表现出来的形式都属于同一种类型。

在第1部分的第2章中,主要对优化器制定执行计划影响最大的所有索引类型进行具体说明。在此所涉及的索引类型有被广泛使用的最一般的B-Tree索引、在海量数据处理或数据仓库中能够获得较好效果的位图索引、基于虚拟列所创建的多样化的用户自定义函数索引等。

在第1部分的第3章中,主要对优化器进行深刻剖析。在此不仅先容优化器在实现最优化操纵时所执行的内部执行步骤,还对作为数据库处理数据步骤的执行计划的各种类型进行了分类说明。假如各位读者能够对各个具体的执行单位有一个很好的理解,那么仍然能够对将其组合在一起的整体执行计划有一个很好的理解。另外,为了引导优化器按照我们所期看的方式制定执行计划,又对各种类型的提示(Hint)进行了说明。

在第1部分的第4章中,非常具体地提出了对制定最优化执行计划有着非常大影响的索引构建战略方案。优化器并不能开辟出新的读取路径,而只能在现有的读取路径中选择出比较有效的路径。由于按照本书中所提出的索引构建战略方案所构建出的索引能够改变现有的读取路径,所以假如没有依据此方案来构建战略性的索引,那么数据的读取效率必然会在很大程度上受到影响。

在第2部分的第5章中,以对执行计划的正确理解为基础,通过具体事例,对只读取了部分数据就能获得结果的秘诀――局部范围扫描的原理和多样化的应用类型进行了具体说明。在这里从一个新的高度对前面所先容的方法进行了扩充说明。最后对在各种比较流行的留言板中实现局部范围扫描的方法进行了具体说明。

在第2部分的第6章中,对表连接的所有类型进行了具体说明。在这里对作为传统型的表连接方式――嵌套循环连接和排序合并连接,以及能够有效实现海量数据连接目的的哈希连接的相关原理进行了彻底剖析,并提出了多种灵活运用准则。另外,又对以多样化类型出现的半连接和在数据仓库中必须要使用的星型连接,以及星变形连接进行了具体说明。最后附加性地提出了位图连接索引的基本概念和灵活运用方法。

在这里向各位读者郑重承诺,我将在尽可能短的时间内完成其他两本系列书籍的编写工作。由于我经常在读者所期待的时间内未能出版约定的书籍,也许各位读者对我如期完成这两本书并不抱太大的希看,所以在这里希看各位读者能够谅解。我在治理自己企业的同时,既要研究新的技术,又要提供解决方案和编写书籍,时间的不足真的让我窘迫和无奈。

由于这两本系列书籍会同时在国外出版发行,所以不论我被多少琐事所困扰,都必须在约定的时间内完成编写工作。因此,这次我可以在这里向各位读者郑重承诺,在本书出版发行后我会以最快的速度完成这两本系列书籍的编写工作。

只凭借对方法的理解是无法征服数据世界的,即使将本书已经阅读了数十遍也只不过是停留在对其表层内容的理解上而已。所以希看各位读者能够对自己提出更高的要求,不要停留在对表层内容的理解上,而是以对本书中所先容的所有原理的正确理解为条件,以本书中所提供的案例为参考,在适当的实际案例中加以灵活运用。我希看各位读者能够通过自己的努力和奋斗,发现别人所不能发现的新世界,而不是仅将自己局限于众人都能够看到的世界里。要勇敢地往挑战自己的极限,走向更大的成功。

2005年12月13日

En-coreConsulting

代表咨询师李华植

他山之石可以攻玉

――《海量数据库解决方案》校订手记

编辑文案:

假如互联网也讲究人口红利,那中国无疑拥有得天独厚的人口基数与互联网普及速度。随着用户及服务规模的急速增长,海量数据库题目不期而至。然而,这一变迁过程进行得太快,相关从业职员来不及做好充分的技术预备,比如说,找不到任何一本可参考的书籍。

也正缘于此,曾服务过几乎所有本国一流世界级企业、拥有几十年从业背景的韩国数据库泰斗李华植先生的畅销著作《海量数据库解决方案》进进我们的视线。在充分了解到该著作在日韩经久不衰的事实,并有请国内着名数据库图书作家、技术权威盖国强老师谨慎评估后,我们有幸将其引进国内,供国内数据库同行参阅与品评。

国内韩版技术书籍的匮乏,主要是由于同时具备语言与技术能力的人选少之又少。为保证本书得以顺利出版,并保持较高水准,特邀原作者创办之EN-CORE公司的郑保卫先生进行初译,盖国强老师进行深进译校、中文统筹,张乐奕、崔华两位数据库资深专家与盖国强老师一道对本书进行了全面的技术解读、转译及校订。

本书的原著者、出版方及参与审译的同仁,都倾注了颇多心力,只希看本书的出版能在一定程度上填补国内关于海量数据库技术方面的空缺,为日新月异的互联网产业发展贡献绵薄之力。实效如何尚不得而知,但请读者朋友不吝指正。

经过三个月的艰苦努力,我和张乐奕(Kamus)、崔华(Dbsnake)终极完成了《海量数据库解决方案》的校译工作。能和两位好友一起字斟句酌、逐字逐句地将韩国同人的名作校译引进中国,于我们于书都是一种缘分与机缘,在校订过程中恩墨科技的罗晓程也协助我们做了大量的文字审阅工作,在此致以深深的谢意。

在各位读者开始阅读本书之前,我们将接触、接受、校译这本书的感慨与来龙往脉记录一下,供大家参详。

Eygle――推动技术交流与分享是一件功德

最早接触到这本书是在2009年,韩国EN-CORE公司的朋友找到我,希看我能够帮忙审阅并做些推荐,当时我正在新华社进行一个项目实施工作。

我立即表达了自己的几个观点:第一,假如是一本好书,我乐于阅读并做评荐,这是我的荣幸;第二,凡是促进技术交流与分享的事情,我都乐于支持并做出力所能及的工作;第三,我愿意义务地往做这样一件事情。

韩国朋友非常愉快地表达了对我的谢意,并向我先容了这本书:在韩国数据库界,该书的作者李华植是教父级的人物,而该书更是圣经般的读物,有累计几十万册的销量,读者不仅仅是数据库从业职员,各类技术职员都将其奉为经典和必读。

我相信了他们的说法,并且向韩国同仁表达了敬意。所有坚持不懈、执著于行的人,都值得我们尊敬。而假如能够促进亚洲数据库界的一些交流,那也是一件功德。

就这样我欣然答应了他们的请求,并期待看到这样一本书的出版。

当我拿到书稿时,一些新的题目出现了,我发现原译文太注重韩文的语言习惯,对于中国的读者来说,阅读起来会非常吃力,甚至会出现难于理解的局面。我建议他们做出进一步的修订,否则很难传达出作者的本意。基于双方的理解,他们诚挚地邀请我来完成这个审校工作,而经过慎重考虑之后,我以为一个人还不够,我需要一个团队,张乐奕和崔华成为了我的伙伴,这个团队通过了他们的考察,就这样,我们接下了这个比想象的还要艰辛的工作。

从原译文的传达,往理解作者的本意,这本就隔了一层,再加上韩文和中文的语言习惯不同,修订的工作极其艰苦,经常每个小时只能完成两三页的校对修正,然后我们三个人还要交叉校订。这期间的小插曲是,由于张乐奕是日语专业出身,他能够从该书的日文版鉴戒不少东西,互相佐证。

就这样,三个月的时间转瞬即逝,我们的工作也已经接近尾声,我可以说的是,我还从来没有这么认真、字斟句酌地往读过一本书,而且是反反复复地阅读,这样阅读的一个好处是,我对这本书的理解和领会比任何其他一本书都要多。

书稿在手里就没有完美的一刻,我们还在不停地修正,直到出版前的最后一刻。我们真挚地希看能够有更多的读者喜欢它。固然这期间我们已经尽了最大努力,但是仍然不知道读者会如何评价,所以我一直心怀忐忑。

关于这本书,可以说的是,我从中学到了很多东西,作者的很多理念让我受益匪浅,这些学到的东西将会指导和影响我以后的学习之路。

首先这本书并不是仅仅写给数据库从业职员的,作者期看所有对数据库感爱好的读者都可以流畅地阅读、透彻地理解。所以,作者在本书中通过大量的类比、比喻将艰深的数据库知识与生活对应起来,使得平时很多不易理解的概念变得浅显易懂。基于深刻的积累,作者能够从不同角度对技术进行概括和阐释,往往有让人豁然开朗的别样感觉。比如在讲到局部范围扫描时,作者用排队等车用户的顺序以及出租车的出发时间进行类比譬喻,精到而浅显,任何人都可以一目了然地理解后面蕴含的复杂技术原理。这或许就是作者的本意,技术原本就是对完美生活的引申与抽象。

又比如在战略性索引构建一章,作者提到“只要为各个索引分配公道的任务,即使需要创建大量的索引也应当果断地作出决定”,为索引指定任务使得索引拟人化地变成了一个工人,有明确任务而不是平时我们茫然地创建索引。作者依据这样一个思想展开了整章的内容,这也和我们的优化思路不谋而合,优化到极致的数据库,我们应当知道哪些SQL查询会使用到哪些索引,而索引又是为哪些查询服务的,必须详尽了解数据库与应用,才能对应用系统了如指掌、有的放矢。

读这本书,我们更多的是往理解作者高屋建瓴的数据库设计与优化思想,而不应该拘泥于具体的技术细节,比如作者所说的局部范围处理、战略性索引构建等,这些概念更多的是将细节的技术原理上升到生活道理与常规的思考。原本很多复杂的技术设计都是可以源自生活中浅显的道理,将技术、生活与常规的思考联系贯串起来,在我看来,是作者带给我们的最大教益。

最初的一句承诺,导致了数月的锲而不舍,这期间的艰苦也让我们每个人都有所收获,当然更大的收获是我们几个朋友之间的友谊;感谢作者李华植带给我们的经典作品;感谢译者郑保卫,正是他的初始翻译才使得本书的中文版得以和广大读者见面;感谢博文视点的张春雨,他坚持不懈的沟通与推动促成了本书的终极出版。

愿这本书能为大家带来一些与众不同的感觉与收获!

盖国强

2010年7月22日

Kamus――书读百遍其义自见

在往年(2010年)一月份的时候,Eygle跟我说有一本韩国IT届教父级的人物撰写的在韩国狂卖数十万册的数据库技术书籍,出版社希看引进到中国来。而这本韩文书已经有了初始中文译本,只是这份中文译本需要一些更熟悉Oracle数据库技术的人来进行再次修订。当第一次听到这件事情时,我以为那仅仅是校对,对于错别字的校正;对于技术术语把握的题目,我没有想到在真正开始着手以后会是如此的困难。

时间过了两个月,到了往年的3月份,正式拿到书稿,当开始修订我负责的第3章时,才发现这是一项巨大的工程。并不是说初始翻译不好,实际上已经很不错了,技术术语基本上也都正确,但是整段整段的句子读下来,却发现读一遍不明白在说什么,读两遍仍然似懂非懂,读三遍可能才知道,哦,应该是这个意思。而第3章是占全书比例最大的章节,有一百五十多页,而即使我聚精会神地往修订,进度也仅仅能够达到一个小时两到三页。之前我工作的环境是在客厅,前面是电视机,而为了修订这本书我不得不将工作环境转移到书房,由于哪怕是一点点声音的干扰也会让进度更加缓慢。这是我之前没有碰到过的情况,我一向自诩可以一心多用,但是修订这本书我碰到了极大挫折。究其原因,应该是初始翻译有不少是通篇大量同词语替换的情况,很多的修饰词都不符合中文的语言特点,而这些修饰词极大地干扰了我的阅读体验。另外一个重要的因素就是李华植先生在写作这本书的时候,对于很多他想极力阐述给大家的观点都辅以了大量的比喻,用出租车、用运动员、用下棋……而这些比喻的生动让阅读者会不由自主地将自己带进这个环境,往仔细琢磨这个比喻的后面想表达的真实含义。

为了能够更正确地理解李华植先生原文的意思,我甚至找来了本书的日文译本出版物(我大学本科学了四年的日语),在我实在不明白原中文译本的含义时,我会往对照日文是如何翻译这段的。有趣的是,通常这很有效果,我甚至根据日文译本在中文译本中添加了一些文字(也许是原中文译本遗漏了),以便于读者能够更好地理解文章含义。

很令人欣喜的是,在修订的后期我已经能够逐渐跟上李华植先生的思维,甚至对于他的比喻已经心有戚戚,修订的速度也得以进步。更令人欣喜的是,如此字斟句酌地阅读李华植先生的这本著作,让我在Oracle数据库性能优化的思想和策略上都学到了很多东西。“书读百遍其义自见”很能贴切地描述修订这本书的过程。

我、Eygle和崔华在三个月中交叉修订,我修订完的第3章Eygle会再次修订一遍,然后传递给崔华,崔华再阅读一遍,同样Eygle修订完的第4章会传给我再重新阅读。我们如此努力,只是希看在最后这本书呈现在大家眼前的时候,是一本符合中文阅读习惯的、不需要再像我们这样费劲就能够有所收获的数据库技术书籍。这是辛劳的三个月,但同样是很有意义的三个月。

对于每一位能够将自己的经验写下来分享给读者的作者,我都深深敬佩。我个人固然一直没有这样的耐性坐下来往真正写一本书,但是我也一直在努力创造一种乐于分享、收获快乐的环境,创办Oracle中国用户组(www.acoug.org),每个月举办免费的活动,邀请演讲者来做技术分享,我一直在努力做自己力所能及的事情。

最后,即使我们如此修订这本书,一定还会有疏漏的地方,甚至是词不达意或者难以理解的部分,希看读者朋友们能够包容。但是更重要的一点是,在你觉得无法理解的时候,歇一段时间再往读第二遍、第三遍,要知道在我们修订的时候也是这样,“书读百遍其义自见”。

张乐奕(Kamus)

2010年7月4日

Dbsnake――循序渐进始有成

三个多月的时间一晃就过往了,我们也终于完成了《海量数据库解决方案》的修订工作。

当初Kamus打电话找我,问我是否有爱好跟他和Eygle一起往修订一本韩国书的时候,我几乎是不假思考地马上就答应了,当时实在我并不知道要修订的是什么书,也不知道具体的工作量会有多少。满口答应只是由于这是Eygle和Kamus找我――我没有理由拒尽。

修订这本书的时候恰逢我跟进的一个项目上线,白天项目的事情已经是忙得焦头烂额了,修订的工作只能够放在晚上做。等到我真正开始修订的时候,才发现工作量真的是太大了,由于几乎是一直处于一种字斟句酌的状态,所以修订的进度非常缓慢,我经常是一个小时才能修订两到三页。怎么办?我怎样才能进步修订的速度,以至于不耽误整个团队的进度?没有别的办法,我只能压缩自己的睡眠时间,于是每个工作日我基本上都是12点左右进睡,早上5点半起床,就这样坚持了三个多月。

现在回头想想,我为什么能够坚持下来?除了要信守我自己的承诺之外,另外一个很重要的原因就是我对Oracle数据库太感爱好了,再加上这本书确实是一本难得的好书!我在仔细修订这本书的过程中已经感觉到了自己的进步,这真的是一件令人非常兴奋的事情!

经常有朋友问我如何才能学好Oracle?我这里想说的是我也不知道该如何才能学好,由于Oracle我也只懂一点点。但是当我看到李华植先生将其20年的数据库经验尽不保存地写在《海量数据库解决方案》中的时候,我觉得我还是应该把我的一点经验写出来,这样也许就能够帮助更多的人。

现在回想起来,我的Oracle进门过程大致分为四个阶段。

第一阶段:从2004年到2006年8月,我用了大概两年多的时中断断续续地看完了OCP9i的一套培训教材(一共4本书)。很惭愧,用了两年多的时间才看完。但是大家要理解我,我本科和研究生都是学数学的,2004年以前连最基本的SQL都不会写,而且那段时间项目的开发回是有一定的工作量的,我基本上只能够利用业余时间自学。

第二阶段:从2006年8月到2008年年初,由于那时候我的Oracle已经有了一点基础,所以我开始大量地看Oracle的各种官方文档,但是这些文档我大都只是过了一遍,唯一的例外就是《10gR2Concepts》和《Oracle10gR2ClusterwareandRACAdministrationandDeploymentGuide》,这两本书我都分别看过两遍。

第三阶段:从2008年年初到现在,我开始在metalink上大量阅读文章,在我真正开始接触metalink的时候我才发现,哇塞,这是多么出色的一个世界!在我看来,metalink就是最好的老师了!直到现在,我工作的第一件事情依然是把metalink打开,平常没事就泡在上面,迄今为止,我已经在metalink上看过超过1500篇文章了。

第四阶段:从2009年3月到现在,我开始仔细阅读DSI(DataServerInternals)教材。DSI实在我看的并未几,迄今为止,只看过了如下几本:

DSI303-AdvancedBackup,RestoreandRecoveryTechniques

DSI401-DumpsCrashesandCorruptions

DSI402-SpaceandTransactionManagement

DSI402e-Datatypesandblockstructures

DSI403e-RecoveryArchitectureComponents

DSI404e-query_optimizer

DSI405-PerformanceTuning

总的感觉是DSI没什么,真的没有我想象的那么难。但是这里我想说的是DSI应该在你具有一定的基础后才开始看,早看反而无益!

前前后后六年的时间,当我看完DSI405后,我真的觉得自己的Oracle已经进门了。实在细心的朋友已经可以发现,我的Oracle进门过程用一句话来概括就是“循序渐进”。

当我看完DSI系列并且在我的个人网站(www.dbsnake.com)上撰写了100多篇文章后,终于迎来了属于我自己的机会――我结识了Eygle和Kamus,并且有机会和他们一起开始迎接很多梦寐以求的挑战。

一直以来,Eygle和Kamus都是我努力的目标,修订的这三个多月固然辛劳,但是能和自己的知音益友一起做事情,于我而言是非常荣幸也是非常开心的事情,再辛劳又算得了什么。这次我修订了第1部分的第1章、第2章和第2部分的第2章,交叉修订了第1部分的第3章。在修订过程中,我付出了大量的努力,以自己所学、所知往理解并传达作者的真知灼见。然而再怎么尽心竭力,我们的工作也难免存在种种不足,但是我们确确实实已经尽力,剩下的只能交给读者往评判吧。

固然这次修订的过程是极其痛苦的,在殚精竭虑之后经常会感觉很崩溃;但是假如能有机会让我继续修订《海量数据库解决方案》的后续书籍,我非常愿意再多崩溃几次。

崔华(Dbsnake)

2010年6月29日

好了,这就是几位校译者的心声。现在这本书已经翻越了山川、民族与语言的障碍,来到中国读者的眼前,让我们一起来阅读和领会一下来自亚洲数据库界的声音吧!

【前言】

【目录】

第1部分影响数据读取的因素

第1章数据的存储结构和特征1

1.1表和索引分离型5

1.1.1堆表的结构5

1.1.2聚簇因子(ClusterFactor)10

1.1.3影响读取的因素13

1.1.3.1大范围数据读取的处理方案14

1.1.3.2进步聚簇因子的手段17

1.2索引组织表(Index-OrganizedTable)19

1.2.1堆表和索引组织表的比较19

1.2.2索引组织表的结构和特征20

1.2.3逻辑ROWID和物理猜(PhysicalGuess)22

1.2.4溢出区(OverflowArea)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.1B-Tree索引44

2.1.1B-Tree索引的结构44

2.1.2B-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的执行计划(ExplainPlan)74

3.1SQL和优化器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视图合并(ViewMerging)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.2ROWID扫描132

3.2.1.3索引扫描133

3.2.1.4B-Tree聚簇读取(ClusterAccess)138

3.2.1.5哈希聚簇读取(HashClusterAccess)139

3.2.1.6采样表扫描(SampleTableScan)140

3.2.2表连接的执行计划143

3.2.2.1嵌套循环连接(NestedLoopsJoin)143

3.2.2.2排序合并连接(SortMergeJoin)146

3.2.2.3哈希连接(HashJoin)148

3.2.2.4半连接(SemiJoin)149

3.2.2.5笛卡儿连接151

3.2.2.6外连接(OuterJoin)154

3.2.2.7索引连接159

3.2.3其他运算方式的执行计划161

3.2.3.1IN-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.6COUNT(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递回展开(RecursiveImplosion)执行计划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查询转换(QueryTransformation)过程中提示的使用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章局部范围扫描(PartialRangeScan)274

5.1局部范围扫描的概念277

5.2局部范围扫描的应用原则282

5.2.1局部范围扫描的条件282

5.2.2不同优化器模式下的局部范围扫描285

5.3进步局部范围扫描执行速度的原理286

5.4向局部范围扫描引导的方法290

5.4.1利用访问路径实现对Sort的代替290

5.4.2只使用索引的局部范围扫描293

5.4.3MIN、MAX的处理294

5.4.4FILTER型局部范围扫描299

5.4.5ROWNUM的灵活运用301

5.4.6利用嵌套视图的局部范围扫描307

5.4.7利用函数的局部范围扫描309

5.4.8利用查询语句二元化特性的局部范围扫描317

5.4.9Web留言板中的局部范围扫描319

第6章表连接的最优化方案337

6.1JOIN和LOOPQUERY的比较340

6.1.1全部范围扫描方式下的比较342

6.1.2局部范围扫描方式下的比较350

6.2连接条件状态对表连接的影响352

6.2.1连接条件正常354

6.2.2连接条件一边异常359

6.2.3连接条件两边异常362

6.3各种表连接方式的特征及活用方案366

6.3.1嵌套循环连接367

6.3.1.1嵌套循环连接的基本概念368

6.3.1.2嵌套循环连接顺序的决定371

6.3.2排序合并连接380

6.3.3嵌套循环连接和排序合并连接的比较384

6.3.4哈希连接(HashJoin)388

6.3.4.1IN-MEMORY哈希连接393

6.3.4.2延迟哈希连接396

6.3.5半连接(SemiJoin)399

6.3.5.1半连接的概念和特征400

6.3.5.2半连接的执行计划402

6.3.6星型(Star)连接418

6.3.7星变形(StarTransformation)连接426

6.3.8位图连接索引438



TAG:


收藏到:Del.icio.us