新書推薦:
《
维奥莱塔:一个女人的一生
》
售價:HK$
76.2
《
商业银行担保管理实务全指引
》
售價:HK$
144.5
《
信风万里:17世纪耶稣会中国年信研究(全二册)
》
售價:HK$
178.1
《
青铜之美 国宝里的中式美学
》
售價:HK$
177.0
《
海外中国研究·朱熹的思维世界(增订版)
》
售價:HK$
143.4
《
甲骨文丛书·沙漠之王:英美在中东的霸权之争
》
售價:HK$
110.9
《
汗青堂丛书147·光明时代:中世纪新史
》
售價:HK$
85.1
《
能成事的团队
》
售價:HK$
111.9
|
編輯推薦: |
字典式写作手法:不讲具体语法,没有简单知识堆砌,直接以案例形式讲技巧与案例 大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值 技巧 案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL的速查字典
《Oracle查询优化改写技巧与案例2.0》在《Oracle查询优化改写技巧与案例》的基础上进行了如下更新。
所有代码都重新执行了一遍,以减少谬误。 为了提高清晰度,尽量删除了图片,改用文本方式展示案例结果。 为了提高阅读效率,删除了平时较少用到的内容。 为了提高可读性,大部分案例都改用了SAMPLE中的数据,这样读者可以更容易地验证代码及思路。
|
內容簡介: |
本书不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法,应熟练掌握这部分内容,因为在日常查询和优化改写中都要用到;第5~12章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数的用法,这部分内容常用于一些复杂需求的实现及优化改写;*后两章介绍日常的优化改写案例,这部分内容是前面所学知识的扩展应用。如果您是开发人员,经常与Oracle打交道,那么本书可以帮助您处理复杂的需求,写出高性能的语句。如果您是运维人员,则本书可以帮助您更快地完成慢语句的改写优化。
|
關於作者: |
师庆栋,网名有教无类。SWOUG(西南Oracle用户组)成员,资深Oracle开发DBA,道森培训高级讲师。拥有超过13年的IT从业经验,擅长Oracle数据库开发,对于数据库架构设计、性能优化拥有丰富的实战经验!通过大量的报表优化改写,积累了丰富的优化改写经验,擅长对Oracle查询语句的优化改写。罗炳森,网名落落。擅长SQL优化,对Oracle优化器有较深的理解。从2007年至今一直专注于SQL优化、表设计优化、SQL查询改写。经常热心帮助网友解决SQL性能问题,累计SQL优化案例上千个。
|
目錄:
|
第1章单表查询1
1.1查询表中所有的行与列1
1.2从表中检索部分行2
1.3查找空值3
1.4空值与运算3
1.5处理空值4
1.6空值与函数5
1.7查找满足多个条件的行6
1.8从表中检索部分列7
1.9为列取有意义的名称7
1.10在WHERE子句中引用取别名的列8
1.11拼接列8
1.12在SELECT语句中使用条件逻辑9
1.13限制返回的行数11
第2章给查询结果排序12
2.1以指定的次序返回查询结果12
2.2按多个字段排序14
2.3按子串排序15
2.4从表中随机返回n条记录16
2.5TRANSLATE18
2.6按数字和字母混合字符串中的字母排序19
2.7处理排序空值20
2.8根据条件取不同列中的值来排序21
第3章操作多个表23
3.1UNION ALL与空字符串23
3.2UNION与OR24
3.3UNION与去重26
3.4组合相关的行30
3.5IN、EXISTS和INNER JOIN30
3.6INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN解析32
3.7外连接与过滤条件36
3.8自关联39
3.9NOT IN、NOT EXISTS和LEFT JOIN40
3.10检测两个表中的数据及对应数据的条数是否相同43
3.11聚集与内连接44
第4章插入、更新与删除49
4.1插入新记录49
4.2阻止对某几列插入50
4.3复制表的定义及数据51
4.4用WITH CHECK OPTION限制数据录入51
4.5多表插入语句52
4.6用其他表中的值更新56
4.7合并记录62
4.8删除违反参照完整性的记录64
4.9删除名称重复的记录64
第5章使用字符串67
5.1生成连续数值67
5.2遍历字符串68
5.3计算字符在字符串中出现的次数69
5.4从字符串中删除不需要的字符71
5.5将字符和数字数据分离72
5.6查询只包含字母或数字型的数据73
5.7提取姓名的大写首字母缩写78
5.8根据表中的行创建一个分隔列表79
5.9提取第n个分隔的子串80
5.10分解IP地址82
5.11将分隔数据转换为多值IN列表82
5.12组合去重83
第6章使用数字86
6.1常用聚集函数86
6.2列转行88
6.3行转列89
6.4生成累计和91
6.5累计与重复值95
6.6生成排名97
6.7返回最值对应信息98
6.8求总和的百分比99
第7章日期运算103
7.1日期类型103
7.2日期计算105
7.3时间间隔类型105
7.4日期计算函数106
7.5间隔月份108
7.6获取记录间的间隔时间108
第8章日期操作112
8.1提取日期中的信息112
8.2提取间隔类型中的信息115
8.3周的计算117
8.4计算一年中周内各日期的次数119
8.5确定一年是否为闰年123
8.6创建本月日历123
8.7全年日历126
8.8补充范围内丢失的值129
8.9识别重叠的日期范围131
第9章范围处理134
9.1定位连续值的范围134
9.2合并连续区间136
9.3合并重叠区间140
9.4用WITH进行范围分组143
第10章高级查找147 10.1给结果集分页147
10.2使用管道函数把全表查询改为增量查询149
10.3内联视图与错误数据153
10.4正确使用分析函数155
10.5找到包含最大值和最小值的记录157
10.6提取维度信息159
第11章报表和数据仓库运算162
11.1行转列子句162
11.2列转行子句165
11.3将结果集反向转置为一列168
11.4打印小票与行列转换169
11.5数据分组172
11.6计算简单的小计173
11.7判别非小计的行175
11.8对不同组分区同时实现聚集177
11.9移动范围取值分析179
11.10计算本期、新增、累加182
11.11listagg与小九九186
第12章分层查询188
12.1简单的树形查询188
12.2根节点、分支节点、叶子节点190
12.3sys_connect_by_path191
12.4树形查询中的排序192
12.5树形查询中的WHERE193
12.6查询树形的一个分支195
12.7剪去一个分支196
12.8多行字符串的拆分196
第13章应用案例实现199
13.1解析简单公式199
13.2匹配汉字200
13.3多表全外连接的问题202
13.4根据传入条件返回不同列中的数据203
13.5拆分字符串进行连接205
13.6用行转列来得到隐含信息206
13.7用隐藏数据进行行转列208
13.8用正则表达式提取clob里的文本格式记录集210
第14章改写调优案例分享212
14.1为什么不建议使用标量子查询212
14.2用LEFT JOIN优化标量子查询215
14.3用LEFT JOIN优化标量子查询之聚合改写216
14.4用LEFT JOIN及行转列优化标量子查询217
14.5标量中有ROWNUM=1218
14.6ROWNUM=1引起的逻辑问题219
14.7标量中有不等关联时改写的问题222
14.8标量中有聚合函数时改写的问题226
14.9用分析函数优化标量子查询(一)229
14.10用分析函数优化标量子查询(二)231
14.11用分析函数优化标量子查询(三)233
14.12标量中的树形查询235
14.13使用标量子查询优化取最值语句238
14.14用MERGE改写优化UPDATE240
14.15UPDATE中有ROWNUM=1243
14.16用MERGE使用左联245
14.17用MERGE改写UPDATE之多个子查询249
14.18将UPDATE改写为MERGE时遇到的问题251
14.19通过分页方式优化最值语句254
14.20让分页语句走正确的PLAN256
14.21去掉分页查询中的DISTINCT257
14.22优化有GROUP BY的分页语句261
14.23用WITH语句优化查询264
14.24用WITH辅助把OR改为UNION265
14.25错误的WITH改写269
14.26错误的分析函数用法272
14.27用LEFT JOIN优化多个子查询(一)274
14.28用LEFT JOIN优化多个子查询(二)278
14.29用LEFT JOIN优化多个子查询(三)280
14.30去掉由EXISTS引起的FILTER283
14.31巧改驱动表提升效率284
14.32用分析函数更改反连接286
14.33集合判断288
14.34相等集合判断289
14.35用分析函数改写最值过滤条件291
14.36用树形查询找指定级别的数据292
14.37行转列与列转行293
14.38UPDATE、ROW_NUMBER与MERGE295
14.39一个UPDATE语句的优化298
14.40自定义函数对速度的影响302
14.41纠结的MERGE语句305
14.42用CASE WHEN去掉UNION ALL308
14.43不恰当的WITH及标量子查询320
14.44用分析函数加行转列来优化标量子查询323
14.45用分析函数处理问题326
14.46用列转行改写A表多列关联B表同列329
14.47用分析函数改写最值语句332
14.48多列关联的半连接与索引334
14.49巧用分析函数优化自关联335
14.50纠结的UPDATE语句340
14.51巧用JOIN条件合并UNION ALL语句342
14.52用分析函数去掉NOT IN345
14.53读懂查询中的需求之裁剪语句349
14.54去掉FILTER里的EXISTS之活学活用350
|
內容試閱:
|
前言
因开办了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中的数据,这样读者可以更容易地验证代码及思路。
删除了实用性不高的实战案例,另增加了部分实战案例(详见最后两章)。
因水平有限,本书在编写过程中难免有错漏之处,恳请读者批评、指正。
作 者
|
|