本书不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法,应熟练掌握这部分内容,因为在日常查询和优化改写中都要用到;第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法,这部分内容常用于一些复杂需求的实现及优化改写;最后两章介绍日常的优化改写案例,这部分内容是前面所学知识的扩展应用。
如果您是开发人员,经常与Oracle打交道,那么本书可以帮助您处理复杂的需求,写出高性能的语句。如果您是运维人员,则本书可以帮助您更快地完成慢语句的改写优化。
畅销书升级,字典式写作,覆盖大多数DBA日常工作场景,分享大量SQL优化的实际工作经验
师庆栋,网名有教无类。SWOUG(西南Oracle用户组)成员,资深Oracle开发DBA,道森培训高级讲师。拥有超过17年的IT从业经验,擅长Oracle数据库开发,对于数据库架构设计、性能优化拥有丰富的实战经验!通过大量的报表优化改写,积累了丰富的优化改写经验,擅长对Oracle查询语句的优化改写。
罗炳森,网名落落。擅长SQL优化,对Oracle优化器有较深的理解。从2007年至今一直专注于SQL优化、表设计优化、SQL查询改写。经常热心帮助网友解决SQL性能问题,累计SQL优化案例上千个。
序1
作为一个有二十多年信息系统工作经历的老DBA,我最近这十多年的主要工作是系统优化,从最初的Oracle数据库优化到现在的信息系统整体优化、架构优化,这十多年来已经做过上百个案例。虽然做了十多年的优化,但老实说,SQL优化一直是我最不擅长、也最不愿意去做的工作,虽然这些年我也被逼着做了不少SQL优化的工作,但我认为自己在这方面还存在缺陷。这些年和我搭档做优化的老熊、老储都是SQL优化方面的高手,在SQL优化方面,他们的能力和经验都远高于我。我也曾和老熊、老储他们针对SQL优化工作做过交流,问他们能否写一本这方面的书。他们虽然做过近十年的SQL优化,但也仅限于见招拆招,对于写一本这方面的书,他们都觉得难度很大。SQL优化的难度很大,主要有以下方面原因。
首先是SQL优化工作十分繁杂,在一个维护得比较好的系统中,需要优化的SQL往往都是业务逻辑十分复杂的SQL语句,而不是简单地加一个索引就能解决问题,甚至有些SQL语句要打印十多页纸,想要理解这样的SQL语句的逻辑含义往往需要花上一段时间。
其次是SQL优化的方法与手段十分丰富,分析工具、分析方法及分析路径纷繁复杂,不同的SQL可能需要用不同的分析思路进行分析,很难找到一条放之四海而皆准的准则。要想获得这些方法只有两个途径:一个是通过自己的实践不断总结和积累经验;另一个是通过阅读相关的书籍,获得前人总结好的经验。
虽然现在市面上有很多关于Oracle SQL优化的书籍,但绝大多数书籍中介绍的SQL优化仅仅介绍了SQL优化的工具如何使用,执行计划如何解读,以及SQL优化从大方向上该如何去做,所举的例子也往往过于经典,不一定适用于我们的生产环境。特别是到目前为止,还没有一本十分系统地介绍SQL改写技巧的书籍,而SQL改写却又是SQL优化中最难的一种工作,也是最实用的一种技术。
第一次看到本书时,其目录让我眼前一亮,这不是一本简单堆砌知识的书籍,而是一本和大家分享工作经验的书。从目录结构就可看出作者对Oracle SQL执行内部机理的认知是十分深入的,同时有大量的SQL优化的实际工作经验。本书从单表访问路径的基础知识开始讲起,将主要的SQL语法中可能的优化点进行一一剖析,总结了大量的优化实战方法。特别值得一提的是,本书最后一章列举了近60个实战案例,内容覆盖大多数DBA的日常工作场景,具有相当大的实用价值。
本书的写作手法十分朴实,甚至可以说有些章节有点过于简练,但是瑕不掩瑜,书中实用的内容之多是十分值得肯定的。本书可以作为DBA的参考书籍,也可以作为开发人员编写SQL的指导书籍。作为DBA行业的一个老兵,我愿意向大家推荐本书,对优化有兴趣的DBA,确实有必要读一读本书。
白鳝
国内知名DBA专家
序2
当教主告诉我他准备写一本有关SQL编程改写的书时,我非常高兴,感觉到将会有一大批开发人员可以借助这样一本书将自己的SQL水平提升一个层次。因为我知道这不会是一本SQL入门的书,也不是一本专门讲优化理论的SQL优化书籍,而是一本结合常见的开发场景介绍编程技巧的书籍。教主拥有多年的软件开发和SQL开发经验,从和他的技术交流中,我也学到了很多SQL技巧,更难得的是,他对同一个SQL有多种不同的写法,结合一些SQL优化的原理,很容易找到非常高效的写法。
教主为人低调,热心帮助他人,并且在博客上经常分享一些SQL技巧和相关知识。感谢他的无私奉献,同时期望教主能坚持下去,不断总结他丰富的SQL开发经验,并与我们一起沟通交流。
黄超(网名:道道)
道森教育集团负责人,资深Oracle培训人员
前言
因开办了Oracle优化改写的在线培训,在教学和答疑的过程中有很多读者希望我能推荐一些相关的学习书籍。说实话,有关Oracle的书籍非常多,但在给读者推荐书籍时我发现特意针对优化改写的书籍不好找,因为很多资料注重各种语法的实现,对优化方面的知识考虑得较少,而介绍优化知识的书籍对改写知识涉及得也不多。因此,和落落商量后,尝试编写了本书。
本书共分14章,各章的主要内容如下。
◎ 第1章介绍初学者在NULL上常犯的错误、字符串中单引号的处理方式及模糊查询时对通配符的转义。
◎ 第2章讲述了ORDER BY的用法及TRANSLATE的特殊用法。
◎ 第3章是基础知识的重点内容,需要掌握好各种连接的写法及为什么要左联、右联,以及过滤条件错误地放在WHERE里会有什么影响;当数据有重复值时要直接关联还是分组汇总后再关联。
◎ 第4章介绍了UPDATE语句的正确用法,以及什么时候UPDATE语句应改写为MERGE。
◎ 第5章以案例的形式讲解了正则表达式的用法,对正则表达式的基础语法不熟悉的读者可以通过官方文档或我的博客来学习,这里面对字符串的拆分方法可以直接套用,而对字符串的分组处理难度稍高,不常处理类似数据的读者可以略过。
◎ 第6章介绍了常用分析函数的几个案例,在大部分情况下使用分析函数会让查询速度得到很大提升。所以,如果想熟练地改写,就必须熟悉分析函数的应用。另外,本章还对很多人感到模糊的max() keep()语句进行了分析。
◎ 第7、8章讲了DATE类型的常见用法。
◎ 第9章仍然介绍分析函数,希望本章内容对范围的处理能给读者一些借鉴。
◎ 第10章的重点是结果集的分页,要弄清楚如何分页,为什么Oracle的分页会写得那么复杂,等等。
◎ 第11章讲述了行列转换函数,并对两个函数进行了剖析,理解了其中的原理就可以用UNPIVOT对UNION ALL做一定的优化。本章的另一个重点就是分组汇总小计的统计,熟练掌握ROLLUP及CUBE可以让你少写一些UNION ALL语句。
◎ 第12章能帮助读者在写树形查询时减少不必要的错误,生成更准确的数据。
◎ 第13章选取了部分网友的需求案例,希望读者能通过这些案例的启发找到实现自己需求的思路。
◎ 第14章选取了能覆盖目前大部分改写方法的案例。读者需要在对前面内容熟悉的基础上来学习这些案例。各种改写方法能否提高速度都与对应的环境有关,所以掌握更多的优化知识和改写方法对优化有很大的帮助。
在此要特别感谢白鳝老师和我们的同事道道给本书作序,通过白鳝老师写的序可以看到,他认真阅读了本书并给出非常中肯的评价,能在百忙之中花费大量时间耐心地把我写的书看完,确实非常令人感动。另外,还要感谢出版社的各位编辑,有很多地方词不达意,是他们给我指出了错误的地方,并给出了改正意见。
《Oracle查询优化改写技巧与案例2.0》在《Oracle查询优化改写技巧与案例》的基础上进行了如下更新。
◎ 所有代码都重新执行了一遍,以减少谬误。
◎ 为了提高清晰度,尽量删除了图片,改用文本方式展示案例结果。
◎ 为了提高阅读效率,删除了平时较少用到的内容。
◎ 为了提高可读性,大部分案例都改用了SAMPLE中的数据,这样读者可以更容易地验证代码及思路。
◎ 删除了实用性不高的实战案例,另增加了部分实战案例(详见最后两章)。
因水平有限,本书在编写过程中难免有错漏之处,恳请读者批评、指正。
作 者
源码呢?数据库结构呢?没有怎么查询
没有源码确实挺坑的
书中大部分内容直接抄袭SQL Cookbook里面Oracle解决方案部分
专业骗钱的一本书!连表都不给,没有表就没办法敲代码,作者也不留下任何联系方式!
好多表没有注明来源,莫名其妙就出现了