本章提要
------------------------------------------------------
调优技术及什么时候使用
------------------------------------------------------
绝对有必要问自己如下三个问题:
~ 这条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优化技术相关推荐

  1. 袋鼠云数栈基于CBO在Spark SQL优化上的探索

    原文链接:袋鼠云数栈基于CBO在Spark SQL优化上的探索 一.Spark SQL CBO选型背景 Spark SQL的优化器有两种优化方式:一种是基于规则的优化方式(Rule-Based Opt ...

  2. SQL语句优化技术分析

    SQL语句优化技术分析 操作符优化 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格. 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用 ...

  3. pb 判断sql 是否合法_宜信技术|《SQL优化最佳实践》作者带你重新了解SQL

    一.SQL :一种熟悉又陌生的编程语言 这里有几个关键词:"熟悉"."陌生"."编程语言". 说它"熟悉",是因为它是D ...

  4. JUST技术:面向时空数据场景的SQL优化器

    一.背景介绍 随着智能城市建设的不断升温,海量的时空数据也基于现代的智能设备和卫星定位系统不断产生.在这个过程当中,因为传统的技术无法解决海量时空数据的管理问题,所以出现了很多新技术和新方法,Geom ...

  5. 【JAVA秒会技术之玩转SQL】MySQL优化技术(一)

    MySQL优化技术(一) 开发的路上,总会碰到一些老系统,越用越慢."慢"的原因也许有很多,但是,博主个人觉得,数据库的设计和sql语句写的好坏,对系统效率的影响是最直接,最显而易 ...

  6. error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析

    董  俊 合肥科技研发中心 一 为什么要进行SQL优化 应用程序运行缓慢的原因通常分为两个方面:源代码和SQL语句.对应用程序的优化也通常针对源代码和SQL语句.源代码的优化,一方面可能会涉及对程序逻 ...

  7. 一条SQL引发的“血案”:与SQL优化相关的4个案例

    导读:笔者早年间从事了多年开发工作,后因个人兴趣转做数据库.在长期的工作实践中,看到了数据库工作(特别是SQL优化)面临的种种问题.本文通过几个案例探讨一下SQL优化的相关问题. 作者:马立和 高振娇 ...

  8. 聊聊SQL优化的基础思路

    点击上方"蓝字" 关注我们,享更多干货! SQL优化是Oracle数据库中比较难的部分,需要对Oracle数据库具备非常扎实的理论基础.但是在刚开始接触时,往往不能很好地将理论知识 ...

  9. MySQL高级-SQL优化

    SQL优化 1.大批量插入数据 2 优化insert语句 3 优化order by语句 3.1 环境准备 3.2 两种排序方式 3.3 Filesort 的优化 4 优化group by 语句 5 优 ...

  10. mysql第二条减第一条_Mysql SQL优化

    SQL优化规则 第一条: 尽量全值匹配,也就是说尽量使用等于 第二条: 最佳左前缀原则 如果是复合索引,要遵守最佳左前缀原则,指的是从最左侧列开始并且不跳过索引中的列 如果是按顺序使用的索引列,且有最 ...

最新文章

  1. Codeforces 1025D(区间dp)
  2. arm linux 识别新硬盘_Arm发布首款64位实时处理器CortexR82
  3. 统计学习:协方差和相关性
  4. 我是如何用10行代码搬运目标图片的?
  5. 大数据在金融领域的应用及问题时
  6. SpringBoot之项目实践一
  7. mysql数据库语法——(六)
  8. 练习4.1 根据后序和中序遍历输出先序遍历 (25 分)
  9. windows bat 命令之%~dp0
  10. 要尊重员工的正当权益
  11. oracle讲表通过主键去重,数据库试题,数据库基础试题及答案
  12. python实现onvif客户端及问题小结
  13. 华为社招嵌入式软件面试_华为社招面试感受 痛苦 悲催
  14. 浅谈天涯社区“工薪一族”爬虫
  15. 微信小程序订单生成支付二维码接口 code
  16. 数据论《西游记》关系网:猪八戒最主动喜欢别人
  17. pytorch模型(.pt)转onnx模型(.onnx)的方法详解(1)
  18. 机械革命台式计算机,机械革命台式机怎么样
  19. 雷神之战html5游戏在线玩,每周30命!5.2雷电王座BOSS莱登限制挑战次数
  20. 第一个python自动化程序

热门文章

  1. (转)马云:不要迷信成功学 要多看别人的失败经历
  2. C语言汇编-函数调用栈
  3. ARMv8-A vs ARMv7 Registers
  4. Netfilter实现机制分析 原作者:Minit
  5. linux内核分析及应用 -- Linux 网络层数据流分析(下)
  6. (五)洞悉linux下的Netfilteriptables:如何理解连接跟踪机制?(1)
  7. linux环境变量中无cc,Linux环境变量
  8. golang 使用openoffice 生成pdf_使用golang生成PDF文件
  9. 云南省人口密度格网数据
  10. SVD 详解 与 spark实战