SQL优化系列(一)- 优化SQL
优化SQL
SQL开发人员从源代码中发现一条跑得很慢的SQL, 如何优化?
DBA从AWR报告中发现一条跑得很慢的SQL,没有源代码或者不想修改源代码怎么办?
SQL自动优化工具SQL Tuning Expert Pro for Oracle
下载: https://www.tosska.cn/tosska-sql-tuning-expert-pro-tse-pro-for-oracle-download-free-trial-zh/
产品介绍: https://www.tosska.cn/tosska-sql-tuning-expert-pro-tse-pro-for-oracle-zh/
执行计划
具体介绍之前,我们先要了解什么是执行计划。
执行计划是数据库系统根据SQL源码和相关对象的统计资料产生的查询方案。在数据库服务器硬件环境和网络确定的情况下,SQL的执行计划决定了SQL的性能。
最佳实践
1. 打开软件Tosska SQL Tuning Expert Pro for Oracle;
2. 连接数据库;
3. 点击 “优化SQL” 右边的+号,创建一个会话;
4. 在SQL编辑器中,输入需要优化的SQL

5. 点击“自动优化SQL”按钮, 选择测试运行的方式,点击”确认“按钮之后,开始产生大量的等价SQL并自动测试运行;

6. 工具产生了205条等价SQL,我们可以看到目前最优的SQL是 SQL 116, SQL执行时间从6.07秒提升到0.06秒。
我对这个优化结果非常满意了,于是点击“停止” 停止优化。
原来的SQL执行时间: 6.07 秒
最优的等价SQL执行时间: 0.06 秒

7. 如果您是SQL开发人员,选中最快的 SQL 116, 复制 SQL文本,粘贴到源代码中替换原始SQL,然后编译程序,调优就完成了。
如果您是运维DBA,没有源代码或者不想修改源代码,忽略本步骤,执行步骤8, 9, 10, 11;

8. 选中最优的SQL 116, 点击 部署 SQL Patch, 用最优的等价SQL的执行计划调整原始SQL的执行计划

9. 在部署SQL Patch 窗口中,点击部署按钮;

10. 关闭“部署SQL Patch”窗口之后,原始SQL的执行计划已经发生变化,SQL Tuning Expert 提醒我们测试运行原始SQL来确认调优效果。
选中原始SQL, 点击“测试运行当前SQL”

11. 神奇的事情出现了。我们没有改变原始SQL,但是原始SQL的执行时间由原来的 6.07秒变成了现在的0秒。

结论:
- 对于SQL开发人员来说,优化SQL后,用最优的等价SQL替换原始SQL;
- 对于运维DBA来说,在不修改SQL源代码的情况下,为原始SQL部署了最优的执行计划,成功优化了SQL的性能。
SQL优化神器 - Tosska SQL Tuning Expert for Oracle
SQL优化系列(一)- 优化SQL的更多相关文章
- Spark SQL概念学习系列之Spark SQL 优化策略(五)
查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟.除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略. (1)内存列式存 ...
- 性能优化系列七:SQL优化
一.SQL在数据库中的执行过程 二.执行计划 1. ACID 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会 ...
- Spark SQL概念学习系列之Spark SQL概述
很多人一个误区,Spark SQL重点不是在SQL啊,而是在结构化数据处理! Spark SQL结构化数据处理 概要: 01 Spark SQL概述 02 Spark SQL基本原理 03 Spark ...
- Spark SQL概念学习系列之分布式SQL引擎
不多说,直接上干货! parkSQL作为分布式查询引擎:两种方式 除了在Spark程序里使用Spark SQL,我们也可以把Spark SQL当作一个分布式查询引擎来使用,有以下两种使用方式: 1.T ...
- Spark SQL概念学习系列之Spark SQL的简介(一)
Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark. 之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不 ...
- Spark SQL概念学习系列之Spark SQL 架构分析(四)
Spark SQL 与传统 DBMS 的查询优化器 + 执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用的 Spark 作为执行引擎. Spark SQL 的查询优化是Catalyst ...
- Spark SQL概念学习系列之Spark SQL入门
前言 第1章 为什么Spark SQL? 第2章 Spark SQL运行架构 第3章 Spark SQL组件之解析 第4章 深入了解Spark SQL运行计划 第5章 测试环境之搭建 第6章 ...
- Spark SQL概念学习系列之Spark SQL入门(八)
前言 第1章 为什么Spark SQL? 第2章 Spark SQL运行架构 第3章 Spark SQL组件之解析 第4章 深入了解Spark SQL运行计划 第5章 测试环境之搭建 第6章 ...
- Spark SQL概念学习系列之Spark SQL基本原理
Spark SQL基本原理 1.Spark SQL模块划分 2.Spark SQL架构--catalyst设计图 3.Spark SQL运行架构 4.Hive兼容性 1.Spark SQL模块划分 S ...
- Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器
模板资源管理器是Microsoft SQL Server Management Studio的一个组件,可以用来SQL代码模板,使用模板提供的代码,省去每次都要输入基本代码的工作. 使用模板资源管理器 ...
随机推荐
- 2019-8-30-C#-如何在项目引用x86-x64的非托管代码
title author date CreateTime categories C# 如何在项目引用x86 x64的非托管代码 lindexi 2019-08-30 08:53:52 +0800 20 ...
- NoSQL 列族数据库
- C语言复制数组
直接上代码,分别是栈上开辟内存,堆上开辟内存 #include <stdio.h> #include <stdlib.h> void test01(){ ]; printf(& ...
- transform函数
C++学习[原创]transform函数的应用 transform(first,last,result,op);//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器, ...
- Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式
模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 通常使用在以下场合 1 有多个对象可以处理一个请求,哪个对象处理该请 ...
- 63 搜索旋转排序数组II
原题网址:https://www.lintcode.com/problem/search-in-rotated-sorted-array-ii/description 描述 跟进“搜索旋转排序数组”, ...
- 浅谈Python小数据池
什么是小数据池 小数据池是python中提高效率的一种方式,固定数据类型的相同值使用同一内存地址. id 用于获取开辟空间的内存地址 代码块 一个文件,一个模块,一个函数,一个类,终端中的每一行代码都 ...
- 原型模式(Prototype)(对象、克隆广告邮件)
有些对象创建过程较为复杂,而且有些时候需要频繁的创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的方法创建更多同类型的对象.这就是原型模式的动机. 原型模式的主要思想 ...
- kafka理论
一.消息队列,简称MQ,message queue 生产者:生存数据写到kafka,持久化到硬盘.对同一个Topic来讲,生产者通常只有‘一个’(可以多并发)数据保存时常可以配置,默认保存七天. 消费 ...
- UVA10253 Series-Parallel Networks
Series-Parallel Networks https://vjudge.net/problem/UVA-10253 如果用一个节点表示串联/并联操作,用一棵树表示每一个串并联网络,要求一个节点 ...