新書推薦:
《
爱琴海的光芒 : 千年古希腊文明
》
售價:HK$
199.4
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:HK$
66.1
《
SDGSAT-1卫星热红外影像图集
》
售價:HK$
445.8
《
股市趋势技术分析(原书第11版)
》
售價:HK$
221.8
《
汉匈战争全史
》
售價:HK$
99.7
《
恶的哲学研究(社会思想丛书)
》
售價:HK$
109.8
《
不止江湖
》
售價:HK$
98.6
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:HK$
154.6
|
編輯推薦: |
# 字典式写作手法:不讲具体语法,没有简单知识堆砌,直接以案例形式讲技巧与案例
# 大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验
# 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值
# 技巧+案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL的速查字典
|
內容簡介: |
本书不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第 1~4 章是基础部分,讲述了 常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询 和优化改写都要用到。第 5~12 章是提高部分,讲解了正则表达式、分析函数、树形查询及汇总函数 的用法。这部分知识常用于对一些复杂需求的实现及优化改写。最后两章介绍日常的优化改写案例。 这部分是前面所学知识的扩展应用。
|
關於作者: |
师庆栋,网名有教无类。SWOUG(西南Oracle用户组)成员,资深Oracle开发DBA,道森培训高级讲师。拥有超过13年的IT从业经验,擅长Oracle数据库开发,对于数据库架构设计、性能优化拥有丰富的实战经验!通过大量的报表优化改写,积累了丰富的优化改写经验,擅长对Oracle查询语句的优化改写。
罗炳森,网名落落。擅长SQL优化,对Oracle优化器有较深的理解。从2007年至今一直专注于SQL优化、表设计优化、SQL查询改写。经常热心帮助网友解决SQL性能问题,累计SQL优化案例上千个。
|
目錄:
|
第 1 章 单表查询
1.1 查询表中所有的行与列
1.2 从表中检索部分行
1.3 查找空值
1.4 将空值转换为实际值
1.5 查找满足多个条件的行
1.6 从表中检索部分列 6
1.7 为列取有意义的名称
1.8 在 WHERE 子句中引用取别名的列
1.9 拼接列
1.10 在 SELECT 语句中使用条件逻辑
1.11 限制返回的行数
1.12 从表中随机返回 n 条记录
1.13 模糊查询
第 2 章 给查询结果排序
2.1 以指定的次序返回查询结果
2.2 按多个字段排序
2.3 按子串排序
2.4 TRANSLATE
2.5 按数字和字母混合字符串中的字母排序
2.6 处理排序空值
2.7 根据条件取不同列中的值来排序
第 3 章 操作多个表
3.1 UNION ALL 与空字符串
3.2 UNION 与 OR
3.3 组合相关的行
3.4 IN、EXISTS 和 INNER JOIN
3.5 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN 解析
3.6 自关联
3.7 NOT IN、NOT EXISTS 和 LEFT JOIN
3.8 外连接中的条件不要乱放
3.9 检测两个表中的数据及对应数据的条数是否相同
3.10 聚集与内连接
3.11 聚集与外连接
3.12 从多个表中返回丢失的数据
3.13 多表查询时的空值处理
第 4 章 插入、更新与删除
4.1 插入新记录
4.2 阻止对某几列插入
4.3 复制表的定义及数据
4.4 用 WITH CHECK OPTION 限制数据录入
4.5 多表插入语句
4.6 用其他表中的值更新
4.7 合并记录
4.8 删除违反参照完整性的记录 70
4.9 删除名称重复的记录
第 5 章 使用字符串
5.1 遍历字符串
5.2 字符串文字中包含引号
5.3 计算字符在字符串中出现的次数
5.4 从字符串中删除不需要的字符
5.5 将字符和数字数据分离
5.6 查询只包含字母或数字型的数据
5.7 提取姓名的大写首字母缩写
5.8 按字符串中的数值排序
5.9 根据表中的行创建一个分隔列表
5.10 提取第 n 个分隔的子串
5.11 分解 IP 地址
5.12 将分隔数据转换为多值 IN 列表
5.13 按字母顺序排列字符串
5.14 判别可作为数值的字符串
第 6 章 使用数字
6.1 常用聚集函数
6.2 生成累计和
6.3 计算累计差
6.4 更改累计和的值
6.5 返回各部门工资排名前三位的员工
6.6 计算出现次数最多的值
6.7 返回最值所在行数据
6.8 first_value
6.9 求总和的百分比 119
第 7 章 日期运算
7.1 加减日、月、年
7.2 加减时、分、秒
7.3 日期间隔之时、分、秒
7.4 日期间隔之日、月、年
7.5 确定两个日期之间的工作天数
7.6 计算一年中周内各日期的次数
7.7 确定当前记录和下一条记录之间相差的天数
第 8 章 日期操作
8.1 SYSDATE 能得到的信息
8.2 INTERVAL
8.3 EXTRACT
8.4 确定一年是否为闰年
8.5 周的计算
8.6 确定一年内属于周内某一天的所有日期
8.7 确定某月内第一个和最后一个“周内某天”的日期
8.8 创建本月日历
8.9 全年日历
8.10 确定指定年份季度的开始日期和结束日期
8.11 补充范围内丢失的值
8.12 按照给定的时间单位进行查找
8.13 使用日期的特殊部分比较记录
8.14 识别重叠的日期范围
8.15 按指定间隔汇总数据
第 9 章 范围处理
9.1 定位连续值的范围 155
9.2 查找同一组或分区中行之间的差
9.3 定位连续值范围的开始点和结束点
9.4 合并时间段
第 10 章 高级查找
10.1 给结果集分页
10.2 重新生成房间号
10.3 跳过表中 n 行
10.4 排列组合去重
10.5 找到包含最大值和最小值的记录
第 11 章 报表和数据仓库运算
11.1 行转列
11.2 列转行
11.3 将结果集反向转置为一列
11.4 抑制结果集中的重复值
11.5 利用“行转列”进行计算
11.6 给数据分组
11.7 对数据分组
11.8 计算简单的小计
11.9 判别非小计的行
11.10 计算所有表达式组合的小计
11.11 人员在工作间的分布
11.12 创建稀疏矩阵
11.13 对不同组分区同时实现聚集
11.14 对移动范围的值进行聚集
11.15 常用分析函数开窗讲解
11.16 listagg 与小九九 215
第 12 章 分层查询
12.1 简单的树形查询
12.2 根节点、分支节点、叶子节点
12.3 sys_connect_by_path
12.4 树形查询中的排序
12.5 树形查询中的 WHERE
12.6 查询树形的一个分支
12.7 剪去一个分支
12.8 字段内 list 值去重
第 13 章 应用案例实现
13.1 从不固定位置提取字符串的元素
13.2 搜索字母数字混合的字符串
13.3 把结果分级并转为列
13.4 构建基础数据的重要性
13.5 根据传入条件返回不同列中的数据
13.6 拆分字符串进行连接
13.7 整理垃圾数据
13.8 用“行转列”来得到隐含信息
13.9 用隐藏数据进行行转列
13.10 用正则表达式提取 clob 里的文本格式记录集
第 14 章 改写调优案例分享
14.1 为什么不建议使用标量子查询
14.2 用 LEFT JOIN 优化标量子查询
14.3 用 LEFT JOIN 优化标量子查询之聚合改写
14.4 用 LEFT JOIN 及行转列优化标量子查询
14.5 标量中有 ROWNUM =1
14.6 不等连接的标量子查询改写(一)
14.7 不等连接的标量子查询改写(二)
14.8 标量子查询与改写逻辑的一致性
14.9 用分析函数优化标量子查询(一)
14.10 用分析函数优化标量子查询(二)
14.11 用分析函数优化标量子查询(三)
14.12 用分析函数优化标量子查询(四)
14.13 用 MERGE 改写优化 UPDATE
14.14 用 MERGE 改写有聚合操作的 UPDATE(一)
14.15 用 MERGE 改写有聚合操作的 UPDATE(二)
14.16 用 MERGE 改写 UPDATE 之多个子查询(一)
14.17 用 MERGE 改写 UPDATE 之多个子查询(二)
14.18 UPDATE 改写为 MERGE 时遇到的问题
14.19 整理优化分页语句
14.20 让分页语句走正确的 PLAN
14.21 去掉分页查询中的 DISTINCT
14.22 用 WITH 语句减少自关联
14.23 用 WITH 改写优化查询
14.24 用 WITH 把 OR 改为 UNION
14.25 错误的 WITH 改写
14.26 错误的分析函数用法
14.27 用 LEFT JOIN 优化多个子查询(一)
14.28 用 LEFT JOIN 优化多个子查询(二)
14.29 用 LEFT JOIN 优化多个子查询(三)
14.30 去掉 EXISTS 引起的 FILTER
14.31 重叠时间计数
14.32 用分析函数改写优化 328
14.33 相等集合之零件供应商
14.34 相等集合之飞机棚与飞行员
14.35 用分析函数改写最值过滤条件
14.36 用树形查询找指定级别的数据
14.37 行转列与列转行
14.38 UPDATE、ROW_NUMBER 与 MERGE
|
內容試閱:
|
序1
作为一个有20多年信息系统工作经历的老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培训人员
|
|