2020-11-27

IT界的一块瑰宝!阿里技术官都对此“赞不绝口”这份SQL优化手册不愧为广大IT技术人员的“未开发宝藏”

写在前面

有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL, SQL应用可一字概括:"广"加之其简单易学,SQL实现也可一字概括:"乐"。

然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要"愁"就一个字, 心碎无数次了。

缘何有性能问题?原因也可以用一个字概括:"量"。 当系统数据量、并发访问量上去后,不良SQL就会拖垮整个系统,我们甚至找不出哪些SQL影响了系统。即便找到也不知如何动手优化。此时的心情也可以用一字概括:"情"。

大家都知道数据是IT系统的核心、重中之重,而SQL是数据交互的必然手段,所以SQL的应用非常广泛,使用人群数量也非常庞大,因此SQL的重要性不言而喻!

下面我们就深呼吸,用心来感受SQL优化的世界吧。

SQL性能优化手册

目录

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

内容概括

由于笔记涉及到的知识点与内容极多,就不一一展示给大家了,若需要完整版《SQL性能调优手册》的朋友,可以一键三连之后【见下图】来获取!!

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第1章全局在胸一用工具对 SQL整体优化

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

只有站得高,你才看得远

从前言故事中,大家可以明白一个道理: SQL 优化是一个复杂的工程,首先要讲究从整体到局部。嗯,那我们就从整体开始吧。首先,我们学习关于数据库整体优化都有哪些性能工具;接着分析这些工具的特点,并结合案例进行探索,最后再进行本章课程的总结和思考。总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

都有哪些性能工具

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第2章风驰电掣一有 效缩短SQL优化过程

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

时间都去哪儿了?

第1章似乎让我们有些热血澎湃,不过提升效率的重点内容会出现在本章,能否从地下室搬出来,就在此一举了。

不知大家还记不记得前言故事1中的一个细节,小王发现问题整整花了1个小时,这时间可不短啊。如果系统故障要花整整1小时才能找到,那这1小时时间对客户来说,是多么难熬的1小时啊。而且,更可悲的是,这1小时小王并没有解决问题,故障依旧。

有人问,为啥会花费1小时时间呢?嗯,本章就开始探讨这个问题。首先说明调优时间都花在哪儿,接下来分析如何缩短,然后结合案例来巩固知识,最后大家思考回顾。总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

从案例看快速SQL调优

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第3章循规蹈矩一如何读懂SQL执行计划

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

很少有DBA能完全读懂

前两章给大家介绍了发现问题后的整体解决思路,接下来进入SQL优化的局部性思路,这一章我们将学习SQL优化的重要知识:执行计划。

执行计划是什么,如何读懂执行计划,读懂执行计划对我们又有什么用?面对这些疑问,我们从执行计划分析概述、读懂执行计划的关键、从案例中辨别低效SQL、 总结思考这四部分入手开始本章的学习分享,如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

读懂执行计划的关键

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第4章运筹帷幄—左右SQL执行计划妙招

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

左右执行计划就是左右人生

经过前面的学习,我们不仅能快速获取整个数据库的整体信息,还能迅速得到SQL的所有详细信息。如果能将笔者研发的自动获取脚本应用在工作中,在解决问题上则无疑更是如虎添翼。

接下来笔者将教会大家如何真正读懂执行计划,这个其实并不容易。循序渐进学完这三个章节后,优化的大方向基本上都清晰了,剩下的就是具体的优化实施。可能会:修改数据库及主机相关性能参数,根据业务规则修改SQL代码,重新收集统计信息获取更准确的执行计划,等等。

  • 停!你想过在不改写SQL和不重新收集统计信息的情况下,改变SQL的执行计划吗?
  • 这,可能吗?
  • 当然可以!

不过,0racle 不是很智能。如果统计信息正确,应该可以得到正确的执行计划;如果统计信息不准确,用收集的方式更合理吧?

你说得太好了!不过假如生产中真的出现了某条SQL由于统计信息不准确执行非常慢的情况,你立即收集统计信息这个动作会影响生产吧?如果要等到系统较闲可以收集的时候,这个SQL不是要影响性能很久吗?

哦,说的是啊。

另外要是万一出现BUG,某SQL无论如何收集统计信息都得不到正确的执行计划,而你明知正确的执行计划该是怎么样的,那你该怎么办呢?

自己动手改变执行计划。

正确!

看来,左右SQL执行计划还真有用,那我要好好跟你学学。

OK,让我们开始吧,先看看总体学习思路,如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

从案例探索其方法及意义

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第5章且慢, 感受体系结构让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

前言故事5中,老丁没有改写SQL,只是加了一个索引,然后SQL就变快了,这是看起来最省事的方法了。其实我们在接下来的7章里大部分内容都是教大家如何不改写SQL完成SQL优化。不过这里要注意几点:

  1. 你必须深刻理解数据库的原理;
  2. 你能把握业务场景;
  3. 接下来的这些章节是教大家如何不改写SQL进行优化,但也不是全都不用改写,比如绑定变量、批量提交等还是必须要改造SQL的。

由于笔记已经介绍得比较详细了,本章会较为简要地给大家介绍一下体系结构知识,然后描述体系结构和SQL优化的关系。最后通过系列扩展的相关优化案例来拓宽我们的视野,从而使我们更深入地了解体系结构的原理。最后是思考回顾。本章总体的学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

体系结构知识

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第6章且慢,体验逻辑结构让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

你可能没想过从逻辑结构原理中动手优化

逻辑结构与SQL 优化之间的关系是大部分人容易忽略的,本章我们先从简单的逻辑结构知识开始介绍,接下来对所有可能和SQL优化有关的逻辑结构的细节做进一步的描述。

随后就是案例剖析环节,在该环节让读者真真切切感知到逻辑结构在影响着工作中的各种场景。最后是思考回顾。本章总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

体系细节与SQL优化

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第7章且慢,探寻表的设计让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

没想到表设计如此有用

表设计是一个非常重要的技术,这个技术使用得当,将会对应用优化起到巨大的作用。比如某张大表是按所在地区查询的,如果这表又按地区做分区,那SQL的性能马上就会大幅度提升,比如查福州的时候,就不会去访问厦门的其他Segment,访问路径就会大大缩减。用一句专业点的话来描述就是: SQL 从全扫描转化成了局部扫描。当然,类似这样的例子很多,比如全局临时表、索引组织表等。这些是表的类型的设计,除此之外还有字段的设计,比如字段的类型、范式与反范式等。

如果我们只是站在表的特性上来研究,显然是不够的。我们还要紧抓业务,站在业务的层面来思考表设计,这才是最高境界。

接下来我们从表设计知识、表设计与SQL优化、相关案例和总结4个方面展开本章的学习,总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

表设计与SQL优化

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第8章且慢,学习索引如何让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

原来索引的学习如此重要

索引是SOL优化使用频度最高的优化武器,甚至可以说你对索引有了深刻的理解,你基本上可以优化身边60%以上的SQL。 如何做到深刻地理解索引呢?最关键是知道索引的结构,并且明白这些结构有什么特点,再思考这些特点和哪些类型的SQL优化有关系。这样,索引的学习就算毕业了。

本章我们先从索引的知识要点入手,得出索引的结构后我们开始尝试让索引的原理和SQL结合起来。后面给大家分析一些经典案例, 让大家从中得到更多的启发。最后对索引知识进行一系列延伸。总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

索引的SQL优化

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第9章且慢,弄清索引之阻碍让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

原来索引是一把双刃剑

任何事物都有它的两面性,索引也不例外,上一章中我们介绍了索引的各种好处,本章我们主要来阐述索引的坏处。

大家可能没注意到,上一章中主要都是一些查询语句,那如果更新语句出现,索引的缺点将很明显。因为索引本身是有序的,而更新数据的过程中也要更新索引,更新完后还要保持索引的有序性,这就需要付出很大的开销了,索引不好的一面就从这里开始显示出来了。

本章我们先简要综述一下索引的不足之处有哪些,接下来详细阐述,随后一起和大家探索各种工作中的案例,最后为思考回顾。总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

感受美好索引另一面

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第10章且慢,其他索引应用让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

走进其他索引的精彩世界

前面一章谈到了索引的好与坏,不知道大家注意到没有,这些其实都是一些 普通的Btree索引。其实还有一些比较特殊的索引, 比如位图索引、函数索引、反向键索引和全文索引。它们的结构很特殊,应用的场景也比较特殊,不过如果我们能巧妙地将这类索引的特性和业务场景结合起来,在SQL优化上将起到意想不到的效果。本章还是先从其他索引的总体概述开始讲述,接着进一步通过各种试验 了解特性,然后进入案例实战体会环节,最后总结。总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

走进其他索引的世界

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第11章且慢, 表连接的秘密让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

原来表连接原理如此实用

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

各类型表连接的知识要点

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第12章动手,经典等价改写让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

其实等价与否总在一念之间

SQL优化的本质就是减少访问路径,前面的章节中我们已经学到了很多减少访问路径的思路,比如增加索引从全表扫描转换成索引范围扫描,比如把表改造成分区表从而从全表扫描转化成局部分区扫描,这些都属于不需要改写SQL就能完成的减少访问路径的思路。当然,在很多场景下,我们必须要完成一些等价改写, 比如case when改造、rownum 分页改写,等等。

除了减少访问路径外,还要注意避免外因的影响,比如,一些执行计划不稳定,所在环境的资源不足,等等,这些也是我们需要注意的。

总体思路如下图:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

设法减少访问路径

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第13章动手, 过程函数优化让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

批量与否效果不言而喻

先抛出一个搬砖的故事来提问:建筑工人A将砖头一块一块地从某地运输到目的地。而建筑工人B则用板车装上砖头来运输,请问谁的效率高?答案是:当砖头特别多的时候,肯定是后者效率高。

搬砖其实就反映了PL/SQL 代码的优化思路。在PL/SQL 中一般都是基于游标循环的各种写法,就是建筑工人A在干活。而接下来我要告诉大家一个集合的概念,如果能用集合的写法来完成PL/SQL的优化改造,优化效果会好得多!这就是建筑工人B在干活。

集合的优化是本章的重点内容。同时还将介绍定义类型的优化、动态SOL的优化和一些其他相关扩展案例。本章总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

PL/SQL优化其他相关扩展

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第14章动手,高级写法应用让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

高级与否答案自在心中

同学们,现在我们开始学习高级SQL让性能提升的方法...

停!天哪,难道之前我们学的都是低级SQL吗,退学费!

冷静,其实这里说的高级SQL,只是一种说法,大概就是一些看起来有些不寻常的特殊SQL,比如insert all 语句、with子句、merge 等。这些SQL有一个共同的特点,就是它们都在内部被优化过了,可以通过比较简单、单步骤的语法来实现复杂和多步骤的功能,同时在性能上还能有不少提升。

本章总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

高级SQL介绍与案例

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第15章动手, 分析函数让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

分析函数是世上最优雅的写法

分析函数是Oracle 8i引入的一个全新的概念,其为我们分析数据提供了一种简单高效的处理方式。在分析函数出现之前,我们必须使用自联查询、子查询或者内联视图,甚至是复杂的存储过程实现的语句,现在只要一条 简单的SQL语句即可实现,而且在执行效率方面也有相当大的提高。

Oracle分析函数实现了一些我们需要编码才能实现的统计功能,这对于简化我们的开发工作有很大的帮助,特别是在开发BI报表时有意想不到的效果;同时我们也可以利用分析函数来实现一些特殊的需求。

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

分析函数详解与案例

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第16章动手,把握需求改写让SQL飞

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

入木三分你需要读懂本质

来,先看一段对话吧:

老师,帮我优化一下这个SQL吧。

好的。

小王,你是不是给错SQL了,这SQL也就1s出来了,逻辑读也不过20。

老师,就这语句,这语句每小时要执行1千万次啊!

哦,这样,为啥要执行这么多次,你去了解一下。那我再看看,好吗?

好的。

我们来看看这段短短的对话,其实内在还是有很多玄机的。首先就是老师为啥会说这个语句给错了,因为他看到语句执行得很快,逻辑读也很少,觉得SQL优化空间不大,用户的感知应该也不会太明显。其次,当他听说语句执行次数达到每小时上千万次时,又要再去看看,因为累积起来,对系统总体的性能影响是很大的。比如逻辑读从20降到10,那1千万次意味着每小时系统的逻辑读减少了1亿个,这是多惊人的数字啊。最后老师同时还让小王去了解为什么要执行这么多次,这意味着老师想从业务层面入手,了解这1千万次执行的必要性,看看能否直接将执行次数降下来。

这段对话是非常经典的对话,折射出"了 解需求,理清业务关系"是非常重要的!这个语句如果能根据业务或者特定的语法进行等价改写,或许就能再提升。而如果能根据对业务的准确理解,巧妙地降低了执行的次数,这个优化工作就已经可以结束了。

总结起来就是,你要确保具备等价改造SQL的意识和本领,然后再大胆结合业务,把握真正的需求,完成优化改造。

总体学习思路如下图所示:

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

开发设计应用中的需求

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

第17章总结与延伸: 从勿信讹传到洞若观火

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

整本笔记都写完了,从优化方法论到具体的优化各种知识。不过,还有一些其他的认识需要在全书的最后做一个补充,那就是:如何让自己有一个清醒冷静的头脑。这是非常有必要的,因为在现在的互联网时代,到处都充斥着虚假错误的信息,不明真相的人很容易瞎转或者盲从,不判断真伪,到最后甚至给自己造成了很大的损失。SQL 优化也不例外,网络上很多所谓的优化宝典等描述的建议都是错误的或者是过时的,你信吗?如果不信, 请看随后的关于SQL优化的各种谣传。都是有脚本有真相哦。

想弄清楚这所有的疑问,一起跟我往下看,先从SQL优化的讹传开始。

谈SQL编写顺序之流言蜚语

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

由于笔记涉及到的知识点与内容极多,就不一一展示给大家了,若需要完整版《SQL性能调优手册》的朋友,可以一键三连之后【见下图】来获取!!

名家力荐

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

IT界的一块瑰宝!这份SQL优化手册不愧为广大IT人员的福音

 

总结

这份笔记安排的章节远远不够覆盖所有的SQL优化知识,具体的SQL优化内容也无法做到详细尽地展开,一方面限于篇幅,另一方面也限于笔者的知识水平。不过,我认为详尽的优化百科大全实际对读者来说并不是最重要的。我将讹传辨识与思维探索作为全书的最后一个章节,就是想告诉大家:质疑探索比学习更重要!

然后,请你看看全书目录,难道你不觉得,SQL 优化不只是一门技术,更是一门艺术!将基于实战的优化方法论融合在美丽的思维导图里,我们看到的,是优化之美!









原文转载:http://www.shaoqun.com/a/493199.html

kk馆:https://www.ikjzd.com/w/1713

grab:https://www.ikjzd.com/w/841

DMM:https://www.ikjzd.com/w/2026


写在前面有人就有江湖,有江湖就有IT系统,有IT系统就有数据库,有数据库就有SQL,SQL应用可一字概括:"广"加之其简单易学,SQL实现也可一字概括:"乐"。然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要"愁"就一个字,心碎无数次了。缘何有性能问题?原因也可以用一个字概括:"量"。当系统数据量、并发访问量上去后,不良SQL就会拖垮整个系统,我们甚至找不出哪
淘粉吧:淘粉吧
蜜芽宝贝:蜜芽宝贝
滑雪装备大全 :滑雪装备大全
河源圣迹苍岩怎么走?:河源圣迹苍岩怎么走?
旺季已来,如何利用PB工具快速突破流量瓶颈,助力爆款崛起! :旺季已来,如何利用PB工具快速突破流量瓶颈,助力爆款崛起!

No comments:

Post a Comment