《收获,不止SQL优化:抓住SQL的本质》梁敬彬【文字版_PDF电子书_】

| 书名:收获,不止SQL优化 作者:梁敬彬/梁敬弘 出版社:电子工业出版社 译者:无 出版日期:2017-6 页数:488 ISBN:9787121314360 | 6.4 豆瓣评分 | 孔网购买 | 点击喜欢 | 全网资源sm.nayona.cn |
内容简介:
有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括:“广”。加之其简单易学,SQL实现也可一字概括:“乐”。
然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。
缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以一字概括:“懵”。
现在《收获,不止SQL优化——抓住SQL的本质》开始带你抛除烦恼,走进优化的可乐世界!
首先教你SQL整体优化、快速优化实施、如何读懂执行计划、如何左右执行计划这四大必杀招。整这些干嘛呢?答案是,传授一个先整体后局部的宏观解决思路,走进“道”的世界。
接下来带领大家飞翔在“术”的天空。教你体系结构、逻辑结构、表设计、索引设计、表连接这五大要领。这么多套路,这又是要干嘛?别急,这是教你如何解决问题,准确地说,是如何不改写即完成SQL优化。
随后《收获,不止SQL优化——抓住SQL的本质》指引大家学会等价改写、过程包优化、高级SQL、分析函数、需求优化这些相关的五大神功。有点头晕,能否少一点套路?淡定,这还是“术”的范畴,依然是教你如何解决问题,只不过这次是如何改写SQL完成优化。
最后一个章节没套路了,其中跟随你多年的错误认识是否让你怀疑人生,其中让SQL跑得更慢的观点,是否让你三观尽毁?
再多一点真诚吧,《收获,不止SQL优化——抓住SQL的本质》提供扫二维码辅助学习,是不是心被笔者给暖到了?
读完全书,来,合上书本,闭上眼睛,深呼吸,用心来感受SQL优化的世界。
一个字:“爽”!
作者简介:
梁敬彬,福富研究院副理事长、公司唯一四星级内训师。不仅是公司特级专家也是国内一线知名数据库专家,其个人及团队在数据库优化和培训领域有着丰富的经验、过硬的质量和良好的口碑。多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力。着有多本畅销数据库技术书籍,其代表作《收获,不止Oracle》已成为数据库领域有口皆碑的经典书籍,《收获,不止SQL优化》即将开创一个新的里程碑。
梁敬弘,清华大学计算机系博士毕业,在计算机领域和金融领域皆有建树,拥有多项计算机相关核心专利技术的同时,还拥有金融行业的CFP等高级认证。现就职于华夏银行总行。
目 录:
第1章 全局在胸——用工具对SQL整体优化 1
1.1 都有哪些性能工具 1
1.1.1 不同调优场景分析 2
1.1.2 不同场景对应工具 2
1.2 整体性能工具的要点 4
1.2.1 五大性能报告的获取 5
1.2.2 五大报告关注的要点 10
1.3 案例的分享与交流 18
1.3.1 和并行等待有关的案例 18
1.3.2 和热块竞争有关的案例 19
1.3.3 和日志等待有关的案例 20
1.3.4 新疆某系统的前台优化 20
1.3.5 浙江某系统的调优案例 21
1.4 本章总结延伸与习题 21
1.4.1 总结延伸 21
1.4.2 习题训练 23
第2章 风驰电掣——有效缩短SQL优化过程 24
2.1 SQL调优时间都去哪儿了 25
2.1.1 不善于批处理频频忙交互 25
2.1.2 无法抓住主要矛盾瞎折腾 25
2.1.3 未能明确需求目标白费劲 26
2.1.4 没有分析操作难度乱调优 26
2.2 如何缩短SQL调优时间 27
2.2.1 先获取有助调优的数据库整体信息 27
2.2.2 快速获取SQL运行台前信息 27
2.2.3 快速拿到SQL关联幕后信息 28
2.3 从案例看快速SQL调优 29
2.3.1 获取数据库整体的运行情况 29
2.3.2 获取SQL的各种详细信息 29
2.4 本章总结延伸与习题 32
2.4.1 总结延伸 32
2.4.2 习题训练 33
第3章 循规蹈矩——如何读懂SQL执行计划 34
3.1 执行计划分析概述 35
3.1.1 SQL执行计划是什么 35
3.1.2 统计信息用来做什么 36
3.1.3 数据库统计信息的收集 37
3.1.4 数据库的动态采样 37
3.1.5 获取执行计划的方法(6种武器) 40
3.2 读懂执行计划的关键 48
3.2.1 解释经典执行计划方法 49
3.2.2 总结说明 55
3.3 从案例辨别低效SQL 55
3.3.1 从执行计划读出效率 56
3.3.2 执行计划效率总结 60
3.4 本章习题、总结与延伸 60
第4章 运筹帷幄——左右SQL执行计划妙招 62
4.1 控制执行计划的方法综述 63
4.1.1 控制执行计划的意义 63
4.1.2 控制执行计划的思路 64
4.2 从案例探索其方法及意义 65
4.2.1 HINT的思路 65
4.2.2 非HINT方式的执行计划改变 72
4.2.3 执行计划的固定 100
4.3 本章习题、总结与延伸 102
第5章 且慢,感受体系结构让SQL飞 103
5.1 体系结构知识 104
5.1.1 组成 104
5.1.2 原理 104
5.1.3 体会 105
5.2 体系与SQL优化 106
5.2.1 与共享池相关 107
5.2.2 数据缓冲相关 111
5.2.3 日志归档相关 116
5.3 扩展优化案例 118
5.3.1 与共享池相关 118
5.3.2 数据缓冲相关 122
5.3.3 日志归档相关 126
5.4 本章习题、总结与延伸 130
第6章 且慢,体验逻辑结构让SQL飞 132
6.1 逻辑结构 132
6.2 体系细节与SQL优化 133
6.2.1 Block 133
6.2.2 Segment与extent 137
6.2.3 Tablespace 139
6.2.4 rowid 139
6.3 相关优化案例分析 140
6.3.1 块的相关案例 141
6.3.2 段的相关案例 144
6.3.3 表空间的案例 148
6.3.4 rowid 151
6.4 本章习题、总结与延伸 153
第7章 且慢,探寻表的设计让SQL飞 154
7.1 表设计 154
7.1.1 表的设计 155
7.1.2 其他补充 155
7.2 表设计与SQL优化 156
7.2.1 表的设计 156
7.2.2 其他补充 179
7.3 相关优化案例分析 184
7.3.1 分区表相关案例 185
7.3.2 全局临时表案例 190
7.3.3 监控异常的表设计 195
7.3.4 表设计优化相关案例总结 199
7.4 本章习题、总结与延伸 199
第8章 且慢,学习索引如何让SQL飞 200
8.1 索引知识要点概述 201
8.1.1 索引结构的推理 201
8.1.2 索引特性的提炼 204
8.2 索引的SQL优化 206
8.2.1 经典三大特性 207
8.2.2 组合索引选用 217
8.2.3 索引扫描类型的分类与构造 219
8.3 索引相关优化案例 225
8.3.1 三大特性的相关案例 225
8.3.2 组合索引的经典案例 231
8.4 本章习题、总结与延伸 234
第9章 且慢,弄清索引之阻碍让SQL飞 235
9.1 索引的不足之处 235
9.1.1 索引的各种开销 236
9.1.2 索引使用失效 236
9.2 感受美好索引另一面 237
9.2.1 索引各种开销 237
9.2.2 索引使用失效 243
9.2.3 索引取舍控制 246
9.3 从案例看索引各种恨 248
9.3.1 索引的开销 248
9.3.2 索引去哪儿了 253
9.3.3 索引的取舍 267
9.4 本章习题、总结与延伸 269
第10章 且慢,其他索引应用让SQL飞 270
10.1 其他索引的总体概述 270
10.1.1 位图索引 271
10.1.2 函数索引 271
10.1.3 反向键索引 272
10.1.4 全文索引 272
10.2 走进其他索引的世界 272
10.2.1 位图索引 273
10.2.2 函数索引 278
10.2.3 反向键索引 282
10.2.4 全文索引 282
10.3 其他索引的相关案例 285
10.3.1 位图索引 286
10.3.2 函数索引 288
10.3.3 反向键索引 297
10.3.4 全文索引 299
10.4 本章习题、总结与延伸 300
第11章 且慢,表连接的秘密让SQL飞 302
11.1 三大经典表连接概要说明 302
11.2 各类型表连接的知识要点 303
11.2.1 从表的访问次数探索 304
11.2.2 表驱动顺序与性能 308
11.2.3 表连接是否有排序 311
11.2.4 各连接的使用限制 314
11.2.5 三大表连接的特性总结 317
11.3 从案例学表连接优化要点 (三刀三斧四式走天下) 317
11.3.1 一次Nested Loops Join的优化全过程 318
11.3.2 一次Hash Join 的 优化全过程 320
11.3.3 一次 Merge Sort Join 的优化全过程 324
11.3.4 一次统计信息收集不准确引发的NL性能瓶颈 329
11.4 本章习题、总结与延伸 332
第12章 动手,经典等价改写让SQL飞 333
12.1 设法减少访问路径 333
12.1.1 Case When改造 334
12.1.2 Rownum分页改写 337
12.1.3 Hint直接路径改造 338
12.1.4 只取你所需的列 339
12.1.5 避免或者减少递归调用 341
12.1.6 ROWID优化应用 347
12.2 设法避免外因影响 350
12.2.1 Hint改写确保执行计划正确 350
12.2.2 避免子查询的错误执行计划 350
12.2.3 所在环境的资源不足等问题 351
12.3 本章习题、总结与延伸 351
第13章 动手,过程函数优化让SQL飞 352
13.1 PL/SQL优化重点 353
13.1.1 定义类型的优化 353
13.1.2 PL/SQL的集合优化 355
13.1.3 PL/SQL的游标合并 361
13.1.4 动态SQL 364
13.1.5 使用10046 trace跟踪PL/SQL 368
13.2 PL/SQL优化其他相关扩展 369
13.2.1 编译无法成功 369
13.2.2 通用脚本分享 370
13.3 本章习题、总结与延伸 380
第14章 动手,高级写法应用让SQL飞 381
14.1 具体SQL调优思路 381
14.1.1 改写SQL调优 382
14.1.2 不改写SQL调优 382
14.2 高级SQL介绍与案例 383
14.2.1 GOURP BY的扩展 383
14.2.2 INSERT ALL 389
14.2.3 MERGE 392
14.2.4 WITH子句 402
14.3 本章习题、总结与延伸 404
第15章 动手,分析函数让SQL飞 406
15.1 高级SQL之分析函数 407
15.1.1 语法概述 407
15.1.2 特别之处 407
15.2 分析函数详解与案例 409
15.2.1 学习详解 410
15.2.2 案例分享 417
15.3 本章习题、总结与延伸 432
第16章 动手,把握需求改写让SQL飞 433
16.1 考虑需求最小化 434
16.2 千万弄清SQL改造的等价性 434
16.2.1 看似等价的写法,其实不等价 435
16.2.2 看似不等价的写法,其实等价 438
16.3 开发设计应用中的需求 439
16.3.1 界面权限设计优化 439
16.3.2 界面汇总与展现 439
16.3.3 界面实时刷新改良 439
16.3.4 目录树菜单的优化 440
16.4 场景选择的经典案例之谁是Count(*)之王 440
16.4.1 优化过程 440
16.4.2 优化总结 445
16.5 本章习题、总结与延伸 446
第17章 总结与延伸:从勿信讹传到洞若观火 447
17.1 SQL优化的各个误区 447
17.1.1 COUNT(*)与COUNT(列)的传言 447
17.1.2 谈SQL编写顺序之流言蜚语 451
17.1.3 IN与EXISTS之争 455
17.1.4 总结探讨 457
17.2 误区背后的话题扩展 457
17.2.1 话题扩展之等价与否优先 457
17.2.2 话题扩展之颠覆误区观点 458
17.3 全书完,致读者 461
浏览器不支持脚本!
摘要:在数据库技术日新月异的今天,SQL优化早已不再是简单的索引添加或语句改写,而是一场关于数据本质与逻辑思维的深度探索。梁敬彬所著的《收获,不止SQL优化:抓住SQL的本质》一书,以其独特的视角和丰富的实战案例,成功打破了传统技术书籍枯燥乏味的桎梏。本书不仅系统性地剖析了SQL执行背后的核心原理,更从思维模式、执行计划、索引策略以及架构设计四个维度,引导读者从“会写SQL”向“懂SQL”进阶。作者将复杂的优化理论转化为生动的故事与可操作的步骤,让读者在理解数据库运行机制的同时,掌握如何从源头抓住性能瓶颈。这篇文章将从思维重构、执行计划解码、索引艺术以及架构权衡四个方面,深入挖掘这本书的精髓,揭示其为何能成为众多数据库从业者的案头必备。
1、重构优化思维模式
许多数据库开发者在面对查询缓慢时,第一反应往往是尝试添加索引或调整语句结构,这种“头痛医头”的方式虽然有时能见效,但往往治标不治本。梁敬彬在书中开篇便提出了一个颠覆性的观点:SQL优化的本质不在于技巧的堆砌,而在于对数据访问路径的深刻理解。他通过大量案例指出,大部分性能问题的根源是开发者对数据分布、表间关系以及数据库内部运作逻辑的认知不足,而非简单的语法错误。这种从“术”到“道”的思维转变,是本书最核心的价值所在。
为了帮助读者建立这种思维模式,作者设计了一套独特的“SQL优化心法”,强调在动手优化之前,必须先进行“逻辑推演”。书中通过对比不同写法下的执行路径差异,让读者直观地看到,哪怕是一个简单的WHERE条件顺序变化,都可能引发截然不同的性能表现。例如,在讲解多表关联时,梁敬彬并不急于给出最优写法,而是引导读者思考驱动表的选择如何影响整个查询的I/O成本,这种启发式的写作手法,极大地激发了读者的主动思考能力。
更为难得的是,书中将这种思维模式延伸到了日常开发习惯中。作者提出,优秀的SQL开发者应当具备“预判”能力,即在编写代码时就对可能的性能风险有所警觉。通过阅读本书,读者会逐渐学会从数据量级、索引结构、连接方式等多个角度进行事前评估,而不是等到系统报警后才手忙脚乱地排查。这种从被动优化到主动设计的转变,正是本书想要传达的核心思想——真正的优化,始于代码落笔之前。
2、深度解码执行计划
执行计划是数据库与开发者沟通的桥梁,但许多人对它的理解仅停留在“看懂”层面,而梁敬彬则教会了读者如何“读懂”执行计划背后的潜台词。书中用了大量篇幅,以图文并茂的方式拆解了Oracle与MySQL等主流数据库的执行计划生成逻辑。作者指出,执行计划中的每一个操作符,如全表扫描、索引范围扫描、嵌套循环连接等,都对应着特定的数据访问策略和资源消耗模型,理解这些模型是定位性能瓶颈的关键。
在解析执行计划时,梁敬彬特别强调了“代价”的概念,并纠正了一个普遍误区:并非所有使用索引的操作都比全表扫描快。他通过一个经典案例展示了当数据量较小或数据分布极度倾斜时,全表扫描反而比索引扫描更高效。这种对底层代价模型的深入剖析,帮助读者跳出了“唯索引论”的陷阱,转而从全局视角评估查询效率。书中还详细介绍了如何通过执行计划中的“Rows”估计值与实际值的偏差,来反推统计信息的准确性,这一技巧对于解决因统计信息过时导致的性能问题极为实用。
此外,作者还针对常见的性能杀手,如隐式类型转换、函数索引失效等问题,在执行计划层面给出了清晰的诊断方法。读者可以学会如何通过观察执行计划中的“Filter”与“Access”条件,快速识别出那些看似正确但实际低效的查询语句。梁敬彬的讲解并非停留在理论层面,而是结合了真实的故障排查案例,让读者在沉浸式体验中掌握从执行计划中发现问题的能力,从而真正做到“知己知彼,百战不殆”。
3、索引策略的艺术
索引是SQL优化中最常用的武器,但也是一把双刃剑,用得好可以大幅提升查询性能,用得不好则可能拖慢写入速度并浪费存储空间。梁敬彬在本书中并未简单罗列索引类型,而是从索引的物理存储结构和逻辑组织方式入手,揭示了索引工作的底层原理。他通过形象的比喻,将B+树索引比作一本精密的字典,让读者理解为什么前缀匹配、最左原则等规则存在,以及如何利用这些规则设计高效的复合索引。
在索引设计策略上,作者提出了“索引瘦身”与“索引覆盖”两大核心原则。书中指出,很多开发者习惯于为每个查询字段都建立索引,导致索引冗余严重,反而增加了维护成本。梁敬彬通过实际案例演示了如何通过分析查询中的过滤条件、排序字段以及关联字段,设计出既能满足查询需求又尽可能精简的索引结构。特别是对于覆盖索引的讲解,让读者意识到当索引包含所有查询字段时,数据库可以避免回表操作,从而获得极致的查询速度。
书中还深入探讨了索引维护中的常见陷阱,例如索引碎片化、索引失效以及统计信息滞后等问题。作者提供了一套系统的索引监控与维护方案,包括如何定期重建索引、如何收集准确的统计信息,以及如何利用数据库提供的索引使用报告来识别无用索引。这些实战经验对于DBA和高级开发者来说尤为珍贵,它们帮助读者从“会建索引”走向“会管理索引”,真正将索引策略转化为持续稳定的性能保障。
4、架构层面权衡与取舍
当优化深入到一定程度时,单点SQL的调优往往难以突破瓶颈,此时就需要从架构层面进行思考。梁敬彬在本书的后半部分,将视野从单条SQL扩展到了整个数据库系统,探讨了分库分表、读写分离、缓存策略以及异步处理等架构手段对SQL性能的影响。他明确指出,架构选择本质上是一种权衡,没有完美的方案,只有最适合业务场景的方案。
在讲解分区表时,作者通过对比范围分区、列表分区与哈希分区的适用场景,揭示了如何根据数据访问特征选择分区键。书中特别强调了分区裁剪的重要性,即通过合理的分区设计,让查询只扫描必要的分区,从而大幅减少I/O开销。同时,梁敬彬也警示了过度分区带来的管理复杂度和跨分区查询性能下降的风险,这种辩证的分析方式让读者对架构优化有了更清醒的认识。
最后,作者将SQL优化与业务逻辑紧密结合,提出了“能不做的查询就不做”的终极优化理念。他通过多个真实案例展示了如何通过调整业务逻辑,例如延迟加载、批量处理以及预计算等方式,从源头减少数据库的负载。这种跳出技术看业务的思维方式,是本书区别于其他技术书籍的亮点。读者在阅读完这部分内容后,会深刻理解到,SQL优化的最高境界,往往不是把一条慢查询改快,而是通过架构设计让这条查询根本不需要执行。
总结:
《收获,不止SQL优化:抓住SQL的本质》一书真正做到了理论与实践的高度统一,它不仅是一本技术手册,更是一部启发思维的方法论指南。梁敬彬用幽默风趣的语言和深入浅出的案例,引导读者从“如何优化”走向“为何这样优化”,帮助无数数据库从业者建立了系统化的性能优化知识体系。无论是初入职场的新手,还是经验丰富的老DBA,都能从这本书中获得全新的启发与实用的技能。
在阅读过程中,读者会逐渐明白,SQL优化的本质其实是对数据流动规律的洞察,是对系统资源分配的智慧,更是对业务需求与技术实现之间平衡的艺术。这本书的价值不仅在于解决当下的问题,更在于培养一种持续进化的能力,让每一位读者都能成为数据库性能的真正掌控者。当合上这本书时,收获的远不止优化技巧,而是一种看待技术与问题的全新视角。
本文由nayona.cn整理
联系我们

关注公众号

微信扫一扫
支付宝扫一扫
