07 SQL优化技术
本章提要
------------------------------------------------------
调优技术及什么时候使用
------------------------------------------------------
绝对有必要问自己如下三个问题:
~ 这条SQL语句是已知并且确定不变的么?
~ 即将采用的措施会影响到单个会话(甚至整个系统)的某一条SQL语句还是全部SQL语句?
~ 有可能改变这条SQL语句么?
7.1 改变访问结构
SQL语句的响应时间往往不仅取决于这些数据是如何存储的, 而且也取决于这些数据是如何访问的.
当你质疑目前的SQL语句时, 首先需要做的是检查当前的访问结构, 从数据字典获得信息, 回答以下问题:
~ 语句中涉及的表的结构类型是什么? 堆表, 索引组织表, 还是外部表? 以及表是否存储在聚簇中?
~ 包含所需数据的物化视图可用么?
~ 在表, 聚簇和物化视图中存在哪些索引? 这些索引建立在哪些字段上, 这些字段的顺序又如何?
~ 所有这些数据段(表,索引等逻辑存储结构)是如何被分区的?
当你要改变访问结构时, 最重要的是仔细考虑可能的副作用.
7.2 修改SQL语句
SQL 常常可以通过不同的方法提交一个完全相同的请求. 举例:
/*以下4个查询, 返回的结果集是一样的, 但是它们的执行计划是不一样的SQL 可以通过很多不同的方法返回一样的结果集哪种是最好的方法呢? 是开发者要考虑的*/SELECT deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp);SELECT deptno FROM dept WHERE NOT EXISTS (SELECT 1 FROM emp WHERE emp.deptno = dept.deptno)SELECT deptno FROM dept MINUS SELECT deptno FROM empSELECT dept.deptno FROM dept, emp WHERE dept.deptno = emp.deptno(+) AND emp.deptno IS NULL
7-1
7.3 提示
指定提示, 你的目标是减少查询优化器要评估的执行计划的数据.
~ 提示必须紧跟着 delete, insert, merge, update 关键字.
~ 在注释分隔符之后的第一个字符必须是加号(+)
提示的分类: 很多, 具体参考 oracle的 sql reference, 11g以后可以通过 v$sql_hint 视图来查询
提示的有效域: 提示仅仅对单个查询块起作用. 例如:
-- 两个查询块分别指定了提示WITH emps AS (SELECT /*+ full(emp) */ deptno, count(*) AS cnt FROM emp GROUP BY deptno) SELECT /*+ full(dept) */ dept.dname, emps.cnt FROM dept, emps WHERE dept.deptno = emps.deptno
7-2
等等吧, 个人感觉提示在测试的时候使用较多, 真正开发时, 感觉不怎么使用提示, 所以这部分没有完成, 需要的时候再补充吧.
另外, 提示只是给查询优化器做一个参考, 查询优化器也未必一定就使用提示.
7.4 改变执行环境
要修改很多参数, 个人感觉默认的就可以, 再确认吧
7.5 SQL概要
图形化界别的东西, 但是感觉好像是收费之类, 目前先跳过
总结一下, 目前我能用的是, 改变访问结构, 修改SQL语句, 使用提示来测试, 只有这些.
转载于:https://www.cnblogs.com/moveofgod/p/3913380.html
07 SQL优化技术相关推荐
- 袋鼠云数栈基于CBO在Spark SQL优化上的探索
原文链接:袋鼠云数栈基于CBO在Spark SQL优化上的探索 一.Spark SQL CBO选型背景 Spark SQL的优化器有两种优化方式:一种是基于规则的优化方式(Rule-Based Opt ...
- SQL语句优化技术分析
SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...
- pb 判断sql 是否合法_宜信技术|《SQL优化最佳实践》作者带你重新了解SQL
一.SQL :一种熟悉又陌生的编程语言 这里有几个关键词:"熟悉"."陌生"."编程语言". 说它"熟悉",是因为它是D ...
- JUST技术:面向时空数据场景的SQL优化器
一.背景介绍 随着智能城市建设的不断升温,海量的时空数据也基于现代的智能设备和卫星定位系统不断产生.在这个过程当中,因为传统的技术无法解决海量时空数据的管理问题,所以出现了很多新技术和新方法,Geom ...
- 【JAVA秒会技术之玩转SQL】MySQL优化技术(一)
MySQL优化技术(一) 开发的路上,总会碰到一些老系统,越用越慢."慢"的原因也许有很多,但是,博主个人觉得,数据库的设计和sql语句写的好坏,对系统效率的影响是最直接,最显而易 ...
- error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析
董 俊 合肥科技研发中心 一 为什么要进行SQL优化 应用程序运行缓慢的原因通常分为两个方面:源代码和SQL语句.对应用程序的优化也通常针对源代码和SQL语句.源代码的优化,一方面可能会涉及对程序逻 ...
- 一条SQL引发的“血案”:与SQL优化相关的4个案例
导读:笔者早年间从事了多年开发工作,后因个人兴趣转做数据库.在长期的工作实践中,看到了数据库工作(特别是SQL优化)面临的种种问题.本文通过几个案例探讨一下SQL优化的相关问题. 作者:马立和 高振娇 ...
- 聊聊SQL优化的基础思路
点击上方"蓝字" 关注我们,享更多干货! SQL优化是Oracle数据库中比较难的部分,需要对Oracle数据库具备非常扎实的理论基础.但是在刚开始接触时,往往不能很好地将理论知识 ...
- MySQL高级-SQL优化
SQL优化 1.大批量插入数据 2 优化insert语句 3 优化order by语句 3.1 环境准备 3.2 两种排序方式 3.3 Filesort 的优化 4 优化group by 语句 5 优 ...
- mysql第二条减第一条_Mysql SQL优化
SQL优化规则 第一条: 尽量全值匹配,也就是说尽量使用等于 第二条: 最佳左前缀原则 如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列 如果是按顺序使用的索引列,且有最 ...
最新文章
- Codeforces 1025D(区间dp)
- arm linux 识别新硬盘_Arm发布首款64位实时处理器CortexR82
- 统计学习:协方差和相关性
- 我是如何用10行代码搬运目标图片的?
- 大数据在金融领域的应用及问题时
- SpringBoot之项目实践一
- mysql数据库语法——(六)
- 练习4.1 根据后序和中序遍历输出先序遍历 (25 分)
- windows bat 命令之%~dp0
- 要尊重员工的正当权益
- oracle讲表通过主键去重,数据库试题,数据库基础试题及答案
- python实现onvif客户端及问题小结
- 华为社招嵌入式软件面试_华为社招面试感受 痛苦 悲催
- 浅谈天涯社区“工薪一族”爬虫
- 微信小程序订单生成支付二维码接口 code
- 数据论《西游记》关系网:猪八戒最主动喜欢别人
- pytorch模型(.pt)转onnx模型(.onnx)的方法详解(1)
- 机械革命台式计算机,机械革命台式机怎么样
- 雷神之战html5游戏在线玩,每周30命!5.2雷电王座BOSS莱登限制挑战次数
- 第一个python自动化程序