首页 > 代码库 > Atitit sql执行计划

Atitit sql执行计划

 

 

Atitit sql执行计划

 

1.1. 首先要搞明白什么叫执行计划?

执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的

 

Oracle中的执行计划显示在执行一条SQL语句时必须执行的详细步骤,通常以表格形式呈现,但其实是树形结构。查看Oracle中的执行计划一般有以下几种方法(包括但不限于)。

不要把SQL语句写得太复杂

  我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这2页长的SQL语句去请教原作者,结果他说时间太长,他一时也看不懂了。可想而知,连原作者都有可能看糊涂的SQL语句,数据库也一样会看糊涂。

  一般,将一个Select语句的结果作为子集,然后从该子集中再进行查询,这种一层嵌套语句还是比较常见的,但是根据经验,超过3层嵌套,查询优化器就很容易给出错误的执行计划。因为它被绕晕了。像这种类似人工智能的东西,终究比人的分辨力要差些,如果人都看晕了,我可以保证数据库也会晕的。

 

1.2. 这个执行计划是怎么得到的?这个执行计划是oracle根据统计信息得到的

既然是计划,那么绝对不是把这个语句先执行一遍,然后把这个计算出来,那样的话这个执行计划就成了事后诸葛亮了。这个执行计划是oracle根据统计信息得到的。那么这个执行计划就有可能不准,请大家看看我的语句以及执行出来的结果:

 现在可以总结一下了:执行计划的准确性(主要指数据返回,数据量大小)由统计信息的准确性决定

 

 怎么样?绝对不是6行那么点点东西吧?这个表的统计信息看来非常非常旧了。于是我对两个表重新进行统计:

     

ANALYZE TABLE TEST COMPUTE STATISTICS;

 

1.3. 查询优化器

 

1.4. Explain语法

EXPLAIN  SELECT ……

变体:1. EXPLAIN EXTENDED SELECT ……

将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT ……

用于分区表的EXPLAIN

执行计划包含的信息

技术分享 

1.5. select_type 

表示查询中每个select子句的类型(简单 OR复杂)

 

技术分享 

a.SIMPLE:查询中不包含子查询或者UNION

b.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY

c.在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY

d.在FROM列表中包含的子查询被标记为:DERIVED(衍生)

e.若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在  FROM子句的子查询中,外层SELECT将被标记为:DERIVED

f.从UNION表获取结果的SELECT被标记为:UNION RESULT

1.6. type

 

表示MySQL在表中找到所需行的方式,又称“访问类型”,常见类型如下:

 

技术分享 

由左至右,由最差到最好

 

a.ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行

 

技术分享 

b.index:Full Index Scan,index与ALL区别为index类型只遍历索引树

 

1.7. 图形执行计划节点工具提示

当游标指向每个节点时,该节点将显示下表中所述的工具提示信息。并非图形执行计划中的所有节点都包含此处介绍的全部工具提示项。

工具提示项

说明

Physical Operation

使用的物理运算符,例如 Hash Join Nested Loops。以红色显示的物理运算符表示查询优化器已发出警告,例如丢失列统计信息或丢失联接谓词。这可能导致查询优化器选择比预期的效率低的查询计划。有关列统计信息的详细信息,请参阅使用统计信息提高查询性能

当图形执行计划建议创建统计信息、更新统计信息或创建索引时,使用 SQL Server Management Studio 对象资源管理器中的快捷菜单可以立即创建或更新丢失的列统计信息和索引。有关详细信息,请参阅索引操作指南主题

Logical Operation

与物理运算符匹配的逻辑运算符,如 Inner Join 运算符。逻辑运算符列在物理运算符之后,两者均位于工具提示的顶部。

Estimated Row Size

操作符生成的行的估计大小(字节)。

Estimated I/O Cost

用于执行操作的所有 I/O 活动的估计开销。此值应尽可能低。

Estimated CPU Cost

用于执行操作的所有 CPU 活动的估计开销。

Estimated Operator Cost

用于执行此操作的查询优化器的开销。此操作的开销以占查询总开销的百分比的形式显示在括号中。由于查询引擎选择最高效的操作来执行查询或执行语句,因此此值应尽可能低。

Estimated Subtree Cost

查询优化器执行此操作及同一子树内位于此操作之前的所有操作的总开销。

Estimated Number of Rows 1

运算符生成的行数。

 

显示图形执行计划 (SQL Server Management Studio).htm

 

imp ,only ok 20 pct,remain 80 pct to see))写SQL要学会使用‘执行计划‘ - 鹏霄万里展雄飞 - 博客频道 - CSDN.NET.htm

(imp 20 pct now )SQL Server执行计划的理解 - 逆心 - 博客园.htm

简介如何查看执行计划以及执行计划的准确性 - wingsless - 博客园.htm

 

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名:Emir Attilax Akbar bin Mahmud bin  attila bin Solomon Al Rapanui 

埃米尔 阿提拉克斯 阿克巴  马哈茂德  阿提拉 所罗门  阿尔 拉帕努伊   

常用名艾提拉(艾龙)   EMAIL:1466519819@qq.com

转载请注明来源:attilax的专栏   http://www.cnblogs.com/attilax/

--Atiend

 

 

Atitit sql执行计划