From e6fbef54efde7025f8b8d3d38fe3aa9c54874d08 Mon Sep 17 00:00:00 2001 From: kangyang Date: Wed, 22 Jul 2020 17:32:12 +0800 Subject: [PATCH] update blog --- .../figures/zh-cn_image_0262916291.png | Bin 0 -> 8791 bytes .../figures/zh-cn_image_0262916293.png | Bin 0 -> 6151 bytes .../figures/zh-cn_image_0262916295.png | Bin 0 -> 1209 bytes .../figures/zh-cn_image_0263539505.png | Bin 0 -> 20207 bytes .../post/kangyang/opengauss-sql-1-update.md | 336 ++++++++++++++++++ content/zh/post/kangyang/title/title.jpg | Bin 0 -> 35528 bytes 6 files changed, 336 insertions(+) create mode 100644 content/zh/post/kangyang/figures/zh-cn_image_0262916291.png create mode 100644 content/zh/post/kangyang/figures/zh-cn_image_0262916293.png create mode 100644 content/zh/post/kangyang/figures/zh-cn_image_0262916295.png create mode 100644 content/zh/post/kangyang/figures/zh-cn_image_0263539505.png create mode 100644 content/zh/post/kangyang/opengauss-sql-1-update.md create mode 100644 content/zh/post/kangyang/title/title.jpg diff --git a/content/zh/post/kangyang/figures/zh-cn_image_0262916291.png b/content/zh/post/kangyang/figures/zh-cn_image_0262916291.png new file mode 100644 index 0000000000000000000000000000000000000000..81ed323affb7e2ecc818c9b253022ddc740248b0 GIT binary patch literal 8791 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 G`~DxSxsD(J literal 0 HcmV?d00001 diff --git a/content/zh/post/kangyang/figures/zh-cn_image_0262916293.png b/content/zh/post/kangyang/figures/zh-cn_image_0262916293.png new file mode 100644 index 0000000000000000000000000000000000000000..7beeb008b4263def35de9376975b2f3b68fb1c82 GIT binary patch literal 6151 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 WjZpFy-DM^Me@cq#3I%d60{#m`34mz; literal 0 HcmV?d00001 diff --git a/content/zh/post/kangyang/figures/zh-cn_image_0262916295.png b/content/zh/post/kangyang/figures/zh-cn_image_0262916295.png new file mode 100644 index 0000000000000000000000000000000000000000..6b007e0d722e4da925e337b6efe500f242e3f647 GIT binary patch literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^Q9wL{gAGWgbo|@Pz`)Yr>EaktaqI1zi@t9R1YCo; zgpLMqhko!?6>*Y{KE2OeK73ctF~3Kpi*)8pRC;uz@9pD{H#iHXTbFg|DlnKVFmzy+ zx*)NDv6oTmLc=iz-VB}#^}Jth-@g6#_3PK+2dkF&w>Rv&oA*8SXYFKF1@^PyO89%a(6t#Wj|0uiAfL#p6)vJ+-qQF|FM)?{TL7 z>VsdlRmVSyYpa)d!DDoMoz31m+>3Hd!d~upe*RTsnZn-E1E00xzkQgKx7D^;mbd$K zkHyo=_T@*U#jmr(_TJr<_ET-DrJv@nR)*k>_@=Diuo39(I}YJ~EhSS|H~5y~j3s>DCJmcTcpCXPsLvTWM%hdi|i?uQJ{XdnDt2M7KMgytV55c0Qg9 z4QwWC84k%n3K+=u-^J2O6(qHQkv9Vr^h7YfY`%H=G&fRA{R(fqx9Zo| zHD;^s7|4EE;dENmH%U9vH{IoFg4K(_hZD5-J@XdOZkD_FHsV`YoGh29Wsb*&Ra5W1 zlGIxMt4Mvb(~UEY>m2%9`tQoUE!ecgUoLb1`eUgd_vr>KDV(y`w>kRcrrgpgrsvl< z^q;x2azXJe+nA{GcYmXo$Is*3#}|_Av^2=<@?!T_Gq|kIZO)kLX19*JX363=*IYNV z@8YsIR-IbC;QN)0(p&nU%yO?@{`6$imQbzYW$x#BWZSDsRD)mgt_@3$yc%s>Vx z69Dr9?~BusOWB!#Cj82DNI$q@&bj|HD|i1Oo|JpHpEXk?Ul4^{^#$XR_W>AX1aUneuvGv zD*}~nsz%e?mu=+sNS(WQ+C0~HHQsMltx|tp?jX8m-nU83=Zr5Mtg?4w36x`dJN49V z+qWAwvAJ`XcqgTEzwoj+y?$*gAAh1<_V=z>U-q}b!E*z5ncw|ZRg!Nw=jp}Df|A-* zYi=vIF8#OkSjNInd^G`g;rpWm{*u0vm9`%$R##^)h;A;l%J4NWT_)rk`e$<6 z%GY22WQ%mvv4FO#ry^J>>uZ literal 0 HcmV?d00001 diff --git a/content/zh/post/kangyang/figures/zh-cn_image_0263539505.png b/content/zh/post/kangyang/figures/zh-cn_image_0263539505.png new file mode 100644 index 0000000000000000000000000000000000000000..55bdd668f076ed5998b3e9d3093fde9450ce2b0d GIT binary patch literal 20207 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

词性

+ +

内容

+ + + +

关键字

+ +

SELECT、FROM、WHERE

+ + +

标识符

+ +

w_name、warehouse、w_no

+ + +

操作符

+ +

=

+ + +

常量

+ +

1

+ + + + + + +语法分析会根据词法分析获得的词来匹配语法规则,最终生成一个抽象语法树(AST),每个词作为语法树的叶子结点出现,如图2所示。 + +**图2 抽象语法树** +![图2](figures/zh-cn_image_0262916293.png) + + + +抽象语法树表达的语义还仅仅限制在能够保证应用的SQL语句符合SQL标准的规范,但是对于SQL语句的内在含义还需要做有效性的检查。 + +- 检查关系的使用:FROM子句中出现的关系必须是该查询对应模式中的关系或视图。 +- 检查与解析属性的使用:在SELECT句中或者WHERE子句中出现的各个属性必须是FROM子句中某个关系或视图的属性。 +- 检查数据类型:所有属性的数据类型必须是匹配的。 + +在有效性检查的同时,语义分析的过程还是有效性语义绑定(Bind)的过程,通过语义分析的检查,抽象语法树就转换成一个逻辑执行计划,逻辑执行计划可以通过关系代数表达式的形式来表现,如图3所示。 + +**图3 关系代数表达式** +![](figures/zh-cn_image_0262916295.png) + +### 查询优化 + +SQL语句在编写的过程中,数据库应用开发人员通常会考虑以不同的形式来编写SQL,来达到提升执行性能的目的,那么为什么还需要查询优化器来对SQL进行优化呢?这是因为一个应用程序可能会涉及到大量的SQL语句,而且有些SQL语句的逻辑极为复杂,数据库开发人员很难面面俱到的写出高性能语句,而查询优化器则具有一些独特的优势: + +- 查询优化器和数据库应用程序开发人员之间的信息不对称,查询优化器在优化的过程中会参考数据库统计模块自动产生的统计信息,这些统计信息从各个角度来描述数据的分布情况,查询优化器会综合考虑统计信息中的各种数据,从而能够得到一个比较好的执行方案,而数据库用户一方面无法全面的了解数据的分布情况,另一方面也很难通过统计信息构建一个精确的代价模型来对执行计划进行筛选。 + +- 查询优化器和数据库应用程序开发人员之间的时效性不同,数据库中的数据瞬息万变,一个在A时间点执行性能很高的执行计划,在B时间点由于数据内容发生了变化,它的性能可能就很低,查询优化器则随时都能根据数据的变化调整执行计划,而数据库应用程序开发人员则只能手动的调整SQL语句,和查询优化器相比,它的时效性比较低。 + +- 查询优化器和数据库应用程序开发人员的计算能力不同,目前计算机的计算能力已经大幅提高,在执行数值计算方面和人脑相比具有巨大的优势,查询优化器对一个SQL语句进行优化时,可以从成百上千个执行方案中选择一个最优方案,而人脑要计算这几百种方案需要的时间要远远长于计算机。 + + +因此,查询优化器是提升查询效率的非常重要的一个手段,虽然一些数据库也提供了人工干预执行计划生成的方法,但是通常而言,查询优化器的优化过程对数据库开发人员是透明的,它自动进行逻辑上的等价变换、自动进行物理执行计划的筛选,极大的提高了数据库应用程序开发人员的“生产力”。 + +依据优化方法的不同,优化器的优化技术可以分为: + +- 基于规则的查询优化(Rule Based Optimization,RBO):根据预定义的启发式规则对SQL语句进行优化。 + +- 基于代价的查询优化(Cost Based Optimization,CBO):对SQL语句对应的待选执行路径进行代价估算,从待选路径中选择代价最低的执行路径作为最终的执行计划。 + +- 基于机器学习的查询优化(AI Based Optimization,ABO):收集执行计划的特征信息,借助机器学习模型获得经验信息,进而对执行计划进行调优,获得最优的执行计划。 + + +在早期的数据库中,查询优化器通常采用启发式规则进行优化,这种优化方式不不够灵活,往往难以获得最优的执行代价,而基于代价的优化则能够针对大多数场景都高效筛选出性能较好的执行计划,但面对用户千人千面,日趋复杂的实际查询场景,普适性的查询优化由于难以捕捉到用户特定的查询需求、数据分布、硬件性能等特征,难以全方位满足实际的优化需求。 + +近年来AI技术,特别是在深度学习领域,发展迅速,基于机器学习的优化器在建模效率、估算准确率和自适应性等方面都有很大优势,有望打破RBO和CBO基于静态模型的限制,通过对历史经验的不断学习,将目标场景的模式进行抽象化,形成动态的模型,自适应地针对用户的实际场景进行优化。openGauss采用基于CBO的优化技术,另外在ABO方面也在进行积极探索。 + +#### **查询重写** + +查询重写利用已有语句特征和关系代数运算来生成更高效的等价语句,在数据库优化器中扮演关键角色,尤其在复杂查询中,能够在性能上带来数量级的提升,可谓是“立竿见影”的“黑科技”。本节介绍查询重写的基本概念、常见的查询重写技术、查询重写面临的挑战。 + +##### 查询重写的概念 + +SQL语言是丰富多样的,非常的灵活,不同的开发人员依据经验的不同,手写的SQL语句也是各式各样,另外还可以通过工具自动生成。SQL语言是一种描述性语言,数据库的使用者只是描述了想要的结果,而不关心数据的具体获取方式,输入数据库的SQL语言很难做到是以最优形式表示的,往往隐含了一些冗余信息,这些信息可以被挖掘用来生成更加高效的SQL语句。查询重写就是把用户输入的SQL语句转换为更高效的等价SQL,查询重写遵循两个基本原则: + +- 等价性:原语句和重写后的语句,输出结果相同。 + +- 高效性:重写后的语句,比原语句在执行时间和资源使用上更高效。 + + +##### 关系代数等价变换 + +查询重写主要是基于关系代数式的等价变换,关系代数的变换通常满足交换律、结合律、分配率、串接率等,如表2所示。 + +**表2 关系代数等价变换** + + + + + + + + + + + + + + + + + + + +

等价变换

+

内容

+

交换律

+

A × B == B × A

+

A ⨝B == B ⨝ A

+

A ⨝F B == B ⨝F A       -- F是连接条件

+

Π p(σF (B)) == σF (Π p(B))       –- F∈p

+

结合律

+

(A × B) × C==A × (B × C)

+

(A ⨝ B) ⨝ C==A ⨝ (B ⨝ C)

+

(A ⨝F1 B) ⨝F2 C==A ⨝F1 (B ⨝F2 C)       -- F1和F2是连接条件

+

分配律

+

σF(A × B) == σF(A) × B -- F ∈ A

+

σF(A × B) == σF1(A) × σF2(B)       -- F = F1 ∪ F2,F1∈A, F2 ∈B

+

σF(A × B) == σFX (σF1(A) × σF2(B))       -- F = F1∪F2∪FX,F1∈A, F2 ∈B

+

Π p,q(A × B) == Π p(A) × Π q(B)       -- p∈A,q∈B

+

σF(A × B) == σF1(A) × σF2(B)       -- F = F1 ∪ F2,F1∈A, F2 ∈B

+

σF(A × B) == σFx (σF1(A) × σF2(B))       -- 其中F = F1∪F2∪Fx,F1∈A, F2 ∈B

+

串接律

+

Π P=p1,p2,…pn(Π Q=q1,q2,…qn(A)) == Π P=p1,p2,…pn(A) -- P ⊆ Q

+

σF1(σF2(A)) == σF1∧F2(A)

+
+ + +表2中的等价变换规则并不能把所有的情况都列举出来,例如,如果对`σF1(σF2(A)) == σF1∧F2(A)`继续推导,那么就可以获得: + +``` +σF1(σF2(A)) == σF1∧F2(A) == σF2∧F1(A) == σF2(σF1(A)) +``` + +因此,在熟悉了关系代数的操作之后,就可以灵活的利用关系代数的等价关系进行推导,获得更多的等价式。这些等价的变换一方面可以用来根据启发式的规则做优化,这样能保证等价转换之后的关系代数表达式的执行效率能够获得提高而非降低,例如借助分配率可以将一个选择操作下推,这样能降低上层结点的计算量,另一方面还可以用来生成候选的执行计划,候选的执行计划再由优化器根据估算的代价进行筛选。 + +##### 常见的查询重写技术 + +介绍下openGauss几个关键的查询重写技术:常量表达式化简、子查询优化、选择下推和等价推理等。 + +1. 常量表达式化简 + +常量表达式即用户输入SQL语句中包含运算结果为常量的表达式,分为算数表达式、逻辑运算表达式、函数表达式,查询重写可以对常量表达式预先计算以提升效率。例如: + +**示例1**:该语句为典型的算数表达式查询重写,经过重写之后,避免了在执行时每条数据都需要进行1+1运算。 + +```sql +SELECT * FROM t1 WHERE c1 = 1+1; +SELECT * FROM t1 WHERE c1 = 2; +``` + +**示例2**:该语句为典型的逻辑运算表达式,经过重写之后,条件永远为false,可以直接返回0行结果,避免了整个语句的实际执行。 + +```sql +SELECT * FROM t1 WHERE 1=0 AND a=1; +SELECT * FROM t1 WHERE false; +``` + +**示例3**:该语句包含函数表达式,由于函数的入参为常量,经过重写之后,直接把函数运算结果在优化阶段计算出来,避免了在执行过程中逐条数据的函数调用开销。 + +```sql +SELECT * FROM t1 WHERE c1 = ADD(1,1); +SELECT * FROM t1 WHERE c1 = 2; +``` + +2. 子查询优化 + + +由于子查询表示的结构更清晰,符合人的阅读理解习惯,用户输入的SQL语句往往包含了大量的子查询。子查询有几种分类方法,根据子查询是否可以独立求解,分为相关子查询和非相关子查询。 + +- 相关子查询:相关子查询是指子查询中有依赖父查询的条件,例如: + + ```sql + SELECT * FROM t1 WHERE EXISTS (SELECT t2.c1 FROM t2 WHERE t1.c1=t2.c1); + ``` + +​ 语句中子查询依赖父查询传入t1.c1的值。 + +- 非相关子查询:非相关子查询是指子查询不依赖父查询,可以独立求解,例如: + + ```sql + SELECT * FROM t1 WHERE EXISTS (SELECT t2.c1 FROM t2); + ``` + + 语句中子查询没有依赖父查询的条件。 + +​ 其中,相关子查询需要父查询执行出一条结果,然后驱动子查询运算,这种嵌套循环的方式执行效率较低。如果能把子查询提升为父查询同级别,那么可以子查询中的表就能和父查询中的表直接做Join操作,由于Join操作可以有多种实现方法,优化器就可以从多种实现方法中选择最优的一种,就有可能提高查询的执行效率,另外优化器还能够应用Join Reorder优化规则对不同的表的连接顺序进行交换,进而有可能产生更好的执行计划。 + +**示例4**:该语句为典型的子查询提升重写,重写之后利用Hash Join可以提升查询性能。 + +```sql +SELECT * FROM t1 WHERE t1.c1 IN (SELECT t2.c1 FROM t2); +SELECT * FROM t1 Semi Join t2 ON t1.c1 = t2.c1; +``` + + + +3. 选择的下推和等价推理 + +选择的下推能够极大的降低上层算子的计算量,从而达到优化的效果,如果选择条件有存在等值操作,那么还可以借助等值操作的特性来实现等价推理,从而获得新的选择条件。 + +例如,假设有两个表t1、t2分别包含\[1,2,3,..100\]共100行数据,那么查询语句 + +```sql +SELECT t1.c1, t2.c1 FROM t1 JOIN t2 ON t1.c1=t2.c1 WHERE t1.c1=1; +``` + +则可以通过选择下推和等价推理进行优化,如图4。 + +**图4 查询重写前后对比图** + +![](figures/zh-cn_image_0263539505.png) + + + +如图4-(1)所示,t1、t2表都需要全表扫描100行数据,然后再做Join,生成100行数据的中间结果,最后再做选择操作,最终结果只有1行数据。如果利用等价推理,我们可以得到`{t1.c1, t2.c1, 1}`的是互相等价的,从而推导出新的`t2.c1=1`的选择条件,并把这个条件下推到t2上,从而得到图4-(4)重写之后的逻辑计划。可以看到,重写之后的逻辑计划,只需要从基表上面获取1条数据即可,Join时内、外表的数据也只有1条,同时省去了在最终结果上的过滤条件,性能大幅提升。 + +4. 外连接消除 + +外连接和内连接的主要区别是对于不能产生连接结果的元组需要补NULL值,如果SQL语句中有过滤条件符合空值拒绝的条件(即会将补充的NULL值再过滤掉),则可以直接消除外连接。 + +**示例5**:外连接转成内连接之后,便于优化器应用更多的优化规则,提高执行效率。 + +```sql +SELECT * FROM t1 FULL JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 > 5 AND t2.c3 < 10; +SELECT * FROM t1 INNER JOIN t2 ON t1.c1 = t2.c2 WHERE t1.c2 > 5 AND t2.c3 < 10; +``` + +5. DISTINCT消除 + +DISTINCT列上如果有主键约束,则此列不可能为空,且无重复值,因此不需要DISTINCT操作,减少计算量。 + +**示例6**:c1列上有的主键属性决定了无需做DISTINCT操作。语句如下: + +```sql +CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT); +SELECT DISTINCT(c1) FROM t1; +SELECT c1 FROM t1; +``` + +6. IN谓词展开 + +**示例7**:将IN操作符改写成等值的过滤条件,便于借助索引减少计算量。语句如下: + +```sql +SELECT * FROM t1 WHERE c1 IN (10,20,30); +SELECT * FROM t1 WHERE c1=10 or c1=20 OR c1=30; +``` + +7. 视图展开 + +视图从逻辑上可以简化书写SQL的难度,提高查询的易用性,而视图本身是虚拟的,因此在查询重写的过程中,需要对视图展开。 + +**示例8**:可以将视图查询重写成子查询的形式,然后再对子查询做简化。语句如下: + +```sql +CREATE VIEW v1 AS (SELECT * FROM t1,t2 WHERE t1.c1=t2.c2); +SELECT * FROM v1; +SELECT * FROM (SELECT * FROM t1,t2 WHERE t1.c1=t2.c2) as v1; +SELECT * FROM t1,t2 WHERE t1.c1=t2.c2; +``` + + + + + + + + + + diff --git a/content/zh/post/kangyang/title/title.jpg b/content/zh/post/kangyang/title/title.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eacc14415983b4bf79879a66ac0ce7622d785367 GIT binary patch literal 35528 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 X#JHBHFs8YSP^PiI5;nwznOXnY^_IcK literal 0 HcmV?d00001 -- Gitee