Atitit sql执行计划
Atitit sql执行计划
1.1. 首先要搞明白什么叫执行计划?
执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的
Oracle中的执行计划显示在执行一条SQL语句时必须执行的详细步骤,通常以表格形式呈现,但其实是树形结构。查看Oracle中的执行计划一般有以下几种方法(包括但不限于)。
不要把SQL语句写得太复杂
我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长。一般来说这么复杂的语句通常都是有问题的。我拿着这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://blog.csdn.net/attilax
--Atiend
Atitit sql执行计划相关推荐
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...
- sql server varchar最大长度_来自灵魂的拷问—知道什么是SQL执行计划吗?
面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧!看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官:. ...
- oracle sql 执行计划分析_《真正读懂Oracle SQL执行计划》
maclean_0071人评论1235人阅读2013-10-25 15:18:12 [视频教学:性能优化]Maclean Liu的Oracle性能优化讲座第一回<真正读懂Oracle SQL执行 ...
- oracle执行计划走索引类型,SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE :VAR,为什么执行计划不走索引?...
SQL执行计划问题:where条件是主键(NUMBER类型字段)LIKE :VAR,为什么执行计划不走索引? 中文社区 (MOSC) 数据库 (MOSC) 6 Replies Last update ...
- 资源放送丨《Oracle数据库SQL执行计划的取得和解析》PPT视频
前段时间,墨天轮邀请Oracle优化方面的资深专家 陈晓辉 老师分享了<Oracle数据库SQL执行计划的取得和解析>,在这里我们共享一下PPT和视频,供大家参考学习. Oracle优化资 ...
- 2场直播丨Oracle数据库SQL执行计划的取得和解析、一次特殊的 Oralce 硬解析性能问题的技术分享...
1. Oracle数据库SQL执行计划的取得和解析- 2021.02.23 2月23日(周二)晚八点直播课,Oracle优化资深专家陈晓辉,以专业ORACLE数据库技术支持工程师的角度讲解SQL文的执 ...
- 查看SQL执行计划的方法及优劣
作者 | 胡佳伟:云和恩墨技术工程师,有多年数据库优化经验,在一线执行过多个包括通信.保险等行业的优化项目. 在 Oracle 的性能分析中,很多时候需要对 SQL 进行分析,而最重要的就是对执行计划 ...
- SQL执行计划错误导致临时表空间不足
故障现象:临时表空间不足的问题已经报错过3次,客户也烦了,前两次都是同事添加5G的数据文件,目前已经达到40G,占用临时表空间主要是distinct 和group by 以及Union all 表数据 ...
- sql执行组件是灰色的_如何分析SQL执行计划图形组件
sql执行组件是灰色的 In the previous articles of this series, SQL Server Execution Plans overview and SQL Ser ...
- 查询sql执行计划_使用SQL执行计划进行查询性能调整
查询sql执行计划 In the previous articles of this series (see the index at bottom), we went through many as ...
最新文章
- 写Struts2、Spring、Hibernate的xml配置文件时无提示
- linux下批量添加新用户
- ho1365_共享力量的四种方法,而不是ho积
- mysql内连接和外连接的区别_数据库左连接、右连接、内连接、全连接区别
- python之UnittTest模块
- WebServer Vs ApplicationServer
- php web长时间不操作退出,Ecshop管理员登陆后台后短时间不操作自动退出的解决方法...
- 冷高轮时间王思聪吃热狗windows电脑壁纸下载
- 计算相关系数进行显著性检验
- php 母版页,.NET_ASP.NET 2.0 中的创建母版页, 虽然母版页和内容页功能 - phpStudy...
- 【简易版】mac安装mysql5.7.31
- oracle如何查看已创建的序列?
- python中cat,stac,transpose,permute,squeeze区别用法
- 服务器 u盘制作系统盘,制作U盘系统盘(WinToFlash)
- WiFi处显示红叉的解决办法
- 归纳编程语言的语法grammer
- 自定义滚动条样式 -webkit-scrollbar
- Error querying database. Cause: java.sql.SQLException
- Android之电话拦截
- importlib-metadata 4.8.2 is installed but importlib-metadata<4.3 is required by {‘flake8‘}