zoukankan      html  css  js  c++  java
  • Oracle sql 优化

    Oracle sql优化笔记:
    看了网上的一些sql优化资料,对于数据库新手来说,看资料能获得
    的sql优化技能短时间是很难掌握的,只有在实践中不断总结,才能
    掌握自己的优化思路。
    优化思路可以罗列以下几点:
    1。学会辨知讹传。
    引用一句话,网上流传的名人名言百分之八十都是假的”——亚拉
    伯罕·林肯。学习新知识的时候,要用追根溯源的精神去看待事物
    ,而不是听到什么就相信什么,实践见真知。
    eg.:oracle10g版本以前,是基于规则的时代,之后是基于代价的时
    代。
    10g前【select count(*) from 大表,小表】和【select count(*)
    from 小表,大表】语句,前者的速度会更快,因为解析是从后向前
    ,from子句的最后一个表为基础表,基础表越小,执行速度越快。
    (多表的笛卡尔积,一行多列,多列一行,当然是一行数据执行的
    快,产生的会话少)
    10g后,select count(*) from 大表,小表】和【select count(*)
    from 小表,大表】语句,两者执行速度一样,后台已有算法去得到
    基于代价的优化方式(RBO)。
    2。要具备少做事的意识
    少做事在数据库上体现在全局临时表;分区表;递归函数的调用;
    集合写法;只select自己需要的列而不是*等等。。。
    3.学会依据场景选择技术
    4.需求最小化(sql尽量只做满足需求的事情,不做额外操作)
    5.牢记sql改造等价性
    6.充分了解需求是顶级优化

    除了优化思路外,熟悉数据库的各个模块的工作方式也至关重要。
    以索引为例:
    1.索引黄金三大特性:高度较低(可快速定位);存储列值(可优化聚合);本身有序(可优化排序)
    2.索引的结构图,以包含(Index entry header,Key column length,Key column value,ROWID)为最小单元。生成一个记录索引信息的二叉树(物理结构图)。查询的时候取深度优先的查询方式最快找到查找的数据。
    3.创建索引的时候,顺序取出索引列及对应的rowid,保存在内存中,然后取出一定数量的数据存放在oracle空闲的block块中(取决于一个block能存放的数据量)
    5.tips:一个概念
    物理读:CPU需要的数据在内存中找不到,那么久必须去物理磁盘上获取,产生物理I/O,叫做一次物理读。
    逻辑读:CPU需要的数据在内存中被找到,数据被从内存中传入CPU
    逻辑读=即时读+一致读
    即时读(当前读):得到块来实际更新要修改的行,所完成的获取就是当前读。当前读读块加的锁与一致读加的锁不同
    一致读:发现要修改的行时,所完成的获取就是当前读。
    6.distinct默认排序耗时很长,能确定表中的数据没有重复的,一定别用,代价很大。
    7.union 语句也会去除重复,默认排序,索引也无法消除排序。
    8.回表
    回表:意思就是返回实际表中取记录,select字段中有除索引列之外的数据,就需要先从索引中找到对应数据的rowid,然后通过rowid返回表中取其他的数据。联合索引也是类似,但是联合索引最好控制在两个字段内,不然开销太大,因为索引都是需要排序的,对插入操作影响太大。

  • 相关阅读:
    haproxy报错解决
    haproxy安装
    gitlab配置webhook报错解决
    git_push报错
    DNS配置
    centos7 选定默认启动内核,及删除无用内核
    ansible安装、配置ssh、hosts、测试连接
    公司手机打卡app时间和百度时间差30秒解决
    所有编辑语言的共性内容元素
    php使用正则函数使用详解
  • 原文地址:https://www.cnblogs.com/huasky/p/8303853.html
Copyright © 2011-2022 走看看