数据库技术丛书 数据库高效优化 架构、规范与SQL技巧
作者:马立和,高振娇,韩锋 著
出版时间: 2020年版
内容简介
SQL是*重要的关系数据库操作语言。SQL语句的运行效率,对于数据库的整体性能至关重要。因此,SQL语句的优化就成为数据库专业人员必须掌握的一门技能。很多初学者经常有如何入门、提高SQL语句优化能力的困惑。本书规避了市面上大多关于SQL优化的书籍内容过于深奥问题,以一线开发工程师的言语和视角展开,理论与实践并重,不仅适合初学者,也适合中端技术人员。 本书以大量案例为依托,系统讲解了SQL语句优化的原理、方法及技术要点,尤为注重实践,在章节中引入了大量的案例,便于学习者实践、测试,反复揣摩。 全书分为四篇: 引言篇,总结了实际工作中常见的问题,并通过真实案例让读者直观感受到SQL语句优化的重要。同时在每个案例后面,还针对案例出现的问题进行了总结; 原理篇,主要讲解了和SQL语句优化相关的基础知识及必要的一些操作,包括优化器、成本、执行计划、统计信息、语句解析、游标、绑定变量、数据对象等诸多方面; 优化篇,这是本书的重点,详细讲述了优化器对于SQL语句的多种处理方式,包括查询转换、数据对象访问方式、表关联、半/反连接、子查询、排序、并行等等。读者了解了这些方式,可以更好地理解优化器的行为,也就使优化更加有的放矢。这部分实战性极强,读者可以作为案头参考资料,随时查阅,反复实践; 实践篇,从数据设计开发规范、数据库画像、SQL优化方法论、AWR报告解读及数据库审核平台实践等几个角度全面讲解在实际工作中如何通过优化SQL,大幅度提高数据库的性能。
目录
推荐序 \n
前 言 \n
第一部分 引入篇 \n
第0章 引言2 \n
第1章 与SQL优化相关的几个案例4 \n
案例1 一条SQL引发的“血案”4 \n
案例2 糟糕的结构设计带来的问题6 \n
案例3 规范SQL写法好处多9 \n
案例4 “月底难过”11 \n
案例5 COUNT(*)到底能有多快13 \n
案例6 “抽丝剥茧”找出问题所在17 \n
第二部分 原理篇 \n
第2章 优化器与成本22 \n
21 优化器22 \n
211 基于规则的优化器23 \n
212 基于成本的优化器25 \n
213 对比两种优化器26 \n
214 优化器相关参数27 \n
215 优化器相关Hint30 \n
22 成本35 \n
221 基本概念35 \n
222 计算公式36 \n
223 计算示例36 \n
第3章 执行计划40 \n
31 概述40 \n
311 什么是执行计划40 \n
312 库执行计划存储方式42 \n
32 解读执行计划43 \n
321 执行顺序43 \n
322 访问路径45 \n
33 执行计划操作45 \n
331 查看执行计划45 \n
332 固定执行计划72 \n
333 修改执行计划80 \n
第4章 统计信息84 \n
41 统计信息分类84 \n
411 系统统计信息84 \n
412 对象统计信息87 \n
413 数据字典统计信息109 \n
414 内部对象统计信息109 \n
42 统计信息操作109 \n
421 系统统计信息110 \n
422 对象统计信息111 \n
423 数据字典统计信息115 \n
424 内部对象统计信息115 \n
第5章 SQL解析与游标116 \n
51 解析步骤116 \n
52 解析过程117 \n
53 游标示例119 \n
第6章 绑定变量122 \n
61 使用方法122 \n
62 绑定变量与解析124 \n
63 游标共享129 \n
第7章 SQL优化相关对象131 \n
71 表131 \n
72 字段137 \n
73 索引140 \n
74 视图148 \n
75 函数149 \n
76 数据链(DB_LINK)150 \n
第8章 SQL优化相关存储结构153 \n
81 表空间153 \n
82 段154 \n
83 区155 \n
84 块156 \n
第9章 特有SQL160 \n
91 MERGE160 \n
92 INSERT ALL162 \n
93 WITH162 \n
94 CONNECT BY /START WITH163 \n
第三部分 SQL篇 \n
第10章 查询转换166 \n
101 查询转换的分类及说明166 \n
102 查询转换—子查询类167 \n
103 查询转换—视图类174 \n
104 查询转换—谓词类178 \n
105 查询转换—消除类180 \n
106 查询转换—其他181 \n
第11章 访问路径189 \n
111 表访问路径189 \n
1111 全表扫描189 \n
1112 ROWID扫描193 \n
1113 采样扫描194 \n
112 B树索引访问路径195 \n
113 位图索引访问路径205 \n
114 其他访问路径210 \n
第12章 表间关联215 \n
121 关联关系215 \n
122 表关联实现方法218 \n
123 嵌套循环连接220 \n
124 排序合并连接226 \n
125 哈希连接232 \n
126 其他连接方式238 \n
第13章 半连接与反连接243 \n
131 半连接243 \n
132 反连接246 \n
第14章 排序250 \n
141 引发排序的操作250 \n
142 避免和减少排序251 \n
1421 优化原则及基本方法251 \n
1422 避免排序的示例252 \n
143 排序过程及内存使用255 \n
144 执行计划中的“Sort”258 \n
第15章 子查询262 \n
151 处理方式262 \n
152 子查询分类263 \n
1521 按照语法分类263 \n
1522 按照谓词分类263 \n
1523 示例264 \n
153 子查询优化266 \n
154 子查询特殊问题272 \n
1541 空值问题272 \n
1542 OR问题274 \n
1543 [NOT] IN/EXISTS问题275 \n
第16章 并行276 \n
161 并行操作276 \n
1611 并行查询277 \n
1612 并行DML280 \n
1613 并行DDL283 \n
162 并行级别286 \n
163 并行原理286 \n
1631 从属进程286 \n
1632 粒度287 \n
第四部分 实践篇 \n
第17章 数据库设计开发规范292 \n
171 Oracle结构设计规范292 \n
1711 建模工具292 \n
1712 命名规范294 \n
1713 数据类型296 \n
1714 表设计297 \n
1715 字段设计299 \n
1716 约束设计299 \n
1717 索引设计300 \n
1718 视图设计303 \n
1719 包设计303 \n
17110 范式与逆范式304 \n
17111 其他设计问题305 \n
172 Oracle开发规范306 \n
1721 书写规范306 \n
1722 编码规范307 \n
1723 注释规范307 \n
1724 语法规范308 \n
173 MySQL结构设计规范312 \n
1731 命名规则313 \n
1732 使用原则314 \n
1733 规模规则315 \n
1734 字段规则315 \n
1735 索引规则319 \n
1736 字符集321 \n
1737 逆范式设计321 \n
174 MySQL开发规范322 \n
1741 基本原则322 \n
1742 语句规范322 \n
第18章 架构设计之数据库承载力评估327 \n
181 评估工作327 \n
1811 建立性能基线327 \n
1812 建立业务压力模型329 \n
1813 模拟压力测试331 \n
182 优化步骤331 \n
第19章 数据库画像335 \n
191 你了解你的数据库吗335 \n
192 画像设计思路336 \n
193 画像报告解读336 \n
1931 概要信息336 \n
1932 空间信息336 \n
1933 对象信息337 \n
1934 访问特征339 \n
1935 资源消耗341 \n
1936 SQL语句342 \n
第20章 数据库审核平台实践:功能343 \n
201 背景说明343 \n
202 平台选型347 \n
203 平台定位348 \n
204 平台原理349 \n
205 推进方法350 \n
第21章 数据库审核平台实践:实现352 \n
211 平台设计352 \n
212 流程图354 \n
213 数据结构355 \n
214 主要模块356 \n
2141 数据采集356 \n
2142 规则解析358 \n
2143 系统管理364 \n
215 审核结果展示366 \n
第22章 数据库审核平台实践:规则370