来来来!一次搞定各种数据库 SQL 执行计划:MySQL、Oracle

在这里插入图片描述
执行计划(execution plan,也叫查询计划或者解释计划)是数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。如果 SQL 语句性能不够理想,我们首先应该查看它的执行计划。本文主要介绍如何在各种数据库中获取和理解执行计划,并给出进一步深入分析的参考文档。

现在许多管理和开发工具都提供了查看图形化执行计划的功能,例如 MySQL Workbench、Oracle SQL Developer、SQL Server Management Studio、DBeaver 等;不过我们不打算使用这类工具,而是介绍利用数据库提供的命令查看执行计划。

我们先给出在各种数据库中查看执行计划的一个简单汇总:

数据库执行计划
MySQLEXPLAIN sql_statement;
OracleEXPLAIN PLAN FOR sql_statement;
SELECT * FROM TABLE(DBMS_XPLAN.display);
SQL ServerSET STATISTICS PROFILE ON;
sql_statement;
SET STATISTICS PROFILE OFF;
PostgreSQLEXPLAIN sql_statement;
SQLiteEXPLAIN QUERY PLAN sql_statement;

MySQL 执行计划
MySQL 中获取执行计划的方法很简单,就是在 SQL 语句的前面加上EXPLAIN关键字:

EXPLAIN
SELECT e.first_name,e.last_name,e.salary,d.department_nameFROM employees eJOIN departments d ON (e.department_id = d.department_id)WHERE e.salary > 15000;

执行该语句将会返回一个表格形式的执行计划,包含了 12 列信息:

id|select_type|table|partitions|type  |possible_keys    |key    |key_len|ref                 |rows|filtered|Extra      |
--|-----------|-----|----------|------|-----------------|-------|-------|--------------------|----|--------|-----------|1|SIMPLE     |e    |          |ALL   |emp_department_ix|       |       |                    | 107|   33.33|Using where|1|SIMPLE     |d    |          |eq_ref|PRIMARY          |PRIMARY|4      |hrdb.e.department_id|   1|     100|           |

MySQL 中的EXPLAIN支持 SELECT、DELETE、INSERT、REPLACE 以及 UPDATE 语句。

Oracle 执行计划
Oracle 中提供了多种查看执行计划的方法,本文使用以下方式:

使用EXPLAIN PLAN FOR命令生成并保存执行计划;
显示保存的执行计划。
首先,生成执行计划:

EXPLAIN PLAN FOR
SELECT e.first_name,e.last_name,e.salary,d.department_nameFROM employees eJOIN departments d ON (e.department_id = d.department_id)WHERE e.salary > 15000;

EXPLAIN PLAN FOR命令不会运行 SQL 语句,因此创建的执行计划不一定与执行该语句时的实际计划相同。

该命令会将生成的执行计划保存到全局的临时表 PLAN_TABLE 中,然后使用系统包 DBMS_XPLAN 中的存储过程格式化显示该表中的执行计划。以下语句可以查看当前会话中的最后一个执行计划:

SELECT * FROM TABLE(DBMS_XPLAN.display);
PLAN_TABLE_OUTPUT                                                                           |
--------------------------------------------------------------------------------------------|
Plan hash value: 1343509718                                                                 ||
--------------------------------------------------------------------------------------------|
| Id  | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     ||
--------------------------------------------------------------------------------------------|
|   0 | SELECT STATEMENT             |             |    44 |  1672 |     6  (17)| 00:00:01 ||
|   1 |  MERGE JOIN                  |             |    44 |  1672 |     6  (17)| 00:00:01 ||
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |    27 |   432 |     2   (0)| 00:00:01 ||
|   3 |    INDEX FULL SCAN           | DEPT_ID_PK  |    27 |       |     1   (0)| 00:00:01 ||
|*  4 |   SORT JOIN                  |             |    44 |   968 |     4  (25)| 00:00:01 ||
|*  5 |    TABLE ACCESS FULL         | EMPLOYEES   |    44 |   968 |     3   (0)| 00:00:01 ||
--------------------------------------------------------------------------------------------||
Predicate Information (identified by operation id):                                         |
---------------------------------------------------                                         ||4 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")                                      |filter("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")                                      |5 - filter("E"."SALARY">15000)                                                           |

Oracle 中的EXPLAIN PLAN FOR支持 SELECT、UPDATE、INSERT 以及 DELETE 语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 升级mysql版本 lamp_Linux 下安装 LAmp及配置

第一步:配置防火墙(默认情况下,端口80和3306是拒绝访问的,在防火墙上进行配置):vi /etc/sysconfig/iptables(在"COMMIT"的上一行加上如下两句)-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(允许8…

阿里云Redis混合存储典型场景:如何轻松搭建视频直播间系统

摘要: 本文主要介绍视频直播间系统,以及如何使用阿里云Redis混合存储实例方便快捷的构建大数据量,低延迟的视频直播间服务。 背景 视频直播间作为直播系统对外的表现形式,在整个系统中处于核心地位。通常除了视频直播窗口外&#…

mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

报错如下: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘sss.month_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by问题出现…

融合非负矩阵分解和图全变分的歌曲推荐算法

摘要: Kirell Benzi, Vassilis Kalofolias, Xavier Bresson and Pierre Vandergheynst Signal Processing Laboratory 2 (LTS2), Swiss Federal Institute of Technology (EPFL) Kirell Benzi, Vassilis Kalofolias, Xavier Bresson and Pierre Vandergheynst Sign…

Facebook面向所有用户开放人脸识别功能;福布斯美国最具创新力领袖公布;AMD:将发新BIOS 优化三代锐龙加速性能……...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

Python数据挖掘与机器学习技术入门实战

摘要: 什么是数据挖掘?什么是机器学习?又如何进行Python数据预处理?本文将带领大家一同了解数据挖掘和机器学习技术,通过淘宝商品案例进行数据预处理实战,通过鸢尾花案例介绍各种分类算法。 课程主讲简介&a…

45K!拿下 AI 技术岗,这些知识点全考了!

是的 ,你没猜错!就是人工智能!AI的炽手可热程度和重要性无需多提。最近,笔者在网上发现了一个报告,报告名字:《BAT人工智能领域人才发展报告》,发现BT招聘AI的速度提升了近400%,其中…

考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧

摘要: 本套自测题专为SVM及其应用而设计,目前超过550人注册了这个测试,最终得满分的人却很少,[doge],一起来看看你的SVM知识能得多少分吧,顺便还能查漏补缺哦。Introduction机器学习强大如一座军械库,里面有…

找第一个只出现一次的字符_leetcode哈希表之第一个只出现一次的字符

序本文主要记录一下leetcode哈希表之第一个只出现一次的字符题目在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。示例:s "abaccdeff"返回 "b"s "" 返回 " "限制:0 &…

linux查看pid 对应的程序_资深程序员总结:分析 Linux 进程的 6 个方法,我全都告诉你...

(给Linux爱好者加星标,提升Linux技能)作者:LemonCoder(本文来自作者投稿)操作系统「进程」是学计算机都要接触的基本概念,抛开那些纯理论的操作系统底层实现,在Linux下做软件开发这么多年,每次程序运行出现问题&#x…

无人值守时代,运维如何保障发布质量?

摘要: 阿里巴巴千亿交易背后,如何尽量避免发布故障?在面对实际运维过程中遇到的问题该如何解决?阿里巴巴运维技术专家少荃,给我们带来了解决方案和思路。 导读:阿里巴巴千亿交易背后,如何尽量避…

记一道字节跳动的算法面试题

戳蓝字“CSDN云计算”关注我们哦!来源公众号:苦逼的码农作者:帅地前几天有个朋友去面试字节跳动,面试官问了他一道链表相关的算法题,不过他一时之间没做出来,就来问了我一下,感觉这道题还不错&a…

带您探究云存储的奥秘,三分钟帮您快速了解OSS

摘要: 快来,带您探究云存储的奥秘,三分钟帮您快速了解OSS。 阿里云对象存储服务,简称 OSS,是一种面向海量数据规模的分布式存储服务,具有稳定、可靠、安全、低成本的特点,能够提供十一个九的数据…

六大主题报告,四大技术专题,AI开发者大会首日精华内容全回顾

戳蓝字“CSDN云计算”关注我们哦!9月6-7日,2019中国AI开发者大会(AI ProCon 2019) 在北京拉开帷幕。本次大会由新一代人工智能产业技术创新战略联盟(AITISA)指导,鹏城实验室、北京智源人工智能研…

SQL老司机,居然是这样智能挖掘异常日志

摘要: 提取异常日志是个大难题 面对海量的日志(TB乃至PB级别),如何从日志中挖掘出异常信息对于大部分的开发者而言是一个大难题。例如,判断机器的延时是否正常,部分request是否正常。通常,我们对于异常的数…

华为杯数学建模优秀论文_【优秀论文】2019数维杯国际大学生数学建模竞赛B题优秀论文...

推荐入群2020数维杯国际赛参赛群132020数维杯国际大学生数学建模竞赛于2020年11月26日08:00(周四)—11月30日08:00(周一)进行,报名正在火热进行中,扫码了解详情或可直接报名!扫码了解详情或可直接报名赛题B回顾2019数维杯国际赛赛题B回顾点击…

Lucene解析 - 基本概念

摘要: 前言 Apache Lucene是一个开源的高性能、可扩展的信息检索引擎,提供了强大的数据检索能力。Lucene已经发展了很多年,其功能越来越强大,架构也越来越精细。它目前不仅仅能支持全文索引,也能够提供多种其他类型的索…

FileZilla 下载安装使用

我电脑是win10 64位的,不知软件为何这样命名,已经用了2年多了。 FileZilla 版本:3.27.1下载链接 http://gainetsoftwares.kuaiyunds.com/gainetsoftwares/FileZilla3d0899f3-d291-4714-bd45-027ffaa49962.zip 1、 双击FileZilla_3.27.1_win3…

Vicor再携创新产品“登陆”ODCC大会,有详情!

戳蓝字“CSDN云计算”关注我们哦!目前,越来越多的应用系统对电源系统的功率密度及转换效率提出了更高要求,在电源系统设计中不仅功率密度是众多要素之一,其他例如电源系统架构、多种开关拓扑、电源模块和基于分立器件设计的封装技…

Lucene 查询原理

摘要: # 前言 Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数…