oracle执行机制

1.客户端发送一条sql给oracle服务器,oracle会看这条sql的执行计划是否存在缓存  如果存在则直接运行,如果不存在执行第二步。

2.如果不存在缓存 则会 进行语法检查(比如我们的sql如果写错了 会报错 就是语法检查这一步做的操作)。然后执行下面的操作(大概是如果你语法没问题。oracle会对你的sql进行优化,并生成执行计划)

3.上面生成的执行计划会保存在缓存中(是为了减少 第二次执行同样的sql时候 再执行硬解析,消耗时间)。

4.oracle最终通过sql执行查询。会在oracle缓存中进行查询如果没有就在oracle硬盘中读取(我们知道oracle数据都是存在硬盘中的,但是每次访问硬盘大量的io操作肯定不可取,所以会读取在缓存中进行查询 缓存中没有 然后再硬盘中读取出来保存在缓存中)。

通过上面 需要注意的 sql语句大小写规范要一致。不然比如第一条sql select * from user  执行了硬解析并保存到了缓存  第二条sql SELECT * FROM USER   会在缓存中查不到 会重新进行硬解析

ps:以前看过sqlserver的执行流程 其实大概也是这样的

避免全表扫描提示查询效率

1、对于null值的查询会进行全表扫描的。所以我们在设计数据的时候对于可能出现null值的字段定义一个默认值 比如"-1" 或者一个‘’  那么当你要查询学生名为空的所有学生的时候:select * from table t.student.Name ='-1'

2、避免隐式转换 比如你在设计数据库的时候 UserId 设置的类型为number   你在客户端进查询的时候select * from user u where u.userid='1' 这种时候数据库和客户端传递的类型不一致 导致索引失效

3、避免查询条件使用函数 select * from user u where u.createTime=to_date(2017-01-02,'yyyy-mm-dd') 这样也会导致索引失效 全表扫描

4、用exists 替换 in 因为in也会导致索引失效 比如查询班级为一年级的学生 select * from student where s.calssid in(select  classid from class  where calssName='一年级')

替换成 select * from student s where exists(select classid from class where className='一年级' and s.classsid=s.classid)

当然这个举例有点极端

5、用union all 替换or

比如你需要查询年龄为13 岁 或者 15岁 或者17岁的所有学生信息

select * from student s where s.age in(13,15,17) 、

替换成

select * from student s where s.age=13

union all

select * from student s where s.age=15

unoin all

select * from student s where s.age=17

6.模糊查询 '%条件%'  是全部扫描的 如果业务支持可以改成 '条件%' 是走索引的

7.join表不能超过3张(表与表之间的关联字段都建立索引) 如果业务支持 可以将数据查询到程序 程序再去取关联数据

List<Student> students=dbhelper.query(select * from student where rownum<=10);

student.ForEach(function(c){

c.studentName=dbhelper.query(select * from class where classid='"+c.classId+').className

})

ps:这里可能会觉得增加了数据库的负荷。因为取关联数据会给数据库发起10次请求  (其实这10次请求是非常快的 第一是数据库连接池   第二是 上面sql执行机制是直接运行的不会执行硬解析 因为这10条sql是一致的)

8、避免使用select *    *会导致oracle解析这个*表里面含有哪些列 而不是直接取。 * 会导致数据传输量 最好需要什么拿什么

总结:上面的优化操作 可能数据量小的时候感觉不到什么 但是上千万数据的时候 往往不规避以上的上的sql会查询很久  而规避了的sql只需要零点几秒

公司组织oracle培训的理解的更多相关文章

  1. 【OCP|OCM】Oracle培训考证系列

     [OCP|OCM]Oracle培训考证系列  我的个人信息 网名:小麦苗 QQ:646634621 QQ群:618766405 我的博客:http://blog.itpub.net/26736162 ...

  2. 了解ORACLE培训OCA-OCP-OCM课程表

    了解ORACLE培训OCA-OCP-OCM课程表考试号: OCA    1Z0-007$125    Oracle Database 10g:SQL Fundamentals 本课程培养学生必要的SQ ...

  3. 杂项-公司:Oracle

    ylbtech-杂项-公司:Oracle 甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩.1989年正式进入中国市场.201 ...

  4. 2012年公司组织旅游西安线个人记录(repost)

    2012年公司组织旅游西安线个人记录 文件夹 [隐藏]  1 序言 2 第1天 3 第2天 4 第3天 5 第4天 6 第5天 [title=2012%E5%B9%B4%E5%85%AC%E5%8F% ...

  5. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  6. oracle 存储过程(分析理解)

    我的理解 比较简单(仅供参考)   存储过程就相当于java里面的方法 简单讲就是一串代码能够实现某个特定的功能,想要使用这个方法直接调用方法名就能够使用他的功能,这就是方法 oracle 存储过程也 ...

  7. oracle schema彻底理解

    oracle中的Schema简析 在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样 ...

  8. Oracle里schema理解

    在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表.一个用户想访问另外一个用户,也就是另外一个schema的表的时候,可以用 usernam ...

  9. Oracle存储过程的理解

    在大专时候学的专业是数据库管理专业,在学校学了各种各样的数据 MSSQL.ORACLE.MySQL. 那时候学数据大部分只学到了些皮毛,仅仅只会按照书上SQL语句,输入计算机得出结果,就很有成就感. ...

随机推荐

  1. sql处理高并发

    sql处理高并发,防止库存超卖 2014-08-14 23:44 13560人阅读 评论(2) 收藏 举报  分类: 数据库(43)  今天王总又给我们上了一课,其实mysql处理高并发,防止库存超卖 ...

  2. usb键鼠驱动分析【钻】

    本文转载自:http://blog.csdn.net/orz415678659/article/details/9197859 一.鼠标 Linux下的usb鼠标驱动在/drivers/hid/usb ...

  3. php gd

    imagecopy() 函数用于拷贝图像或图像的一部分. imagecopyresized() 函数用于拷贝部分图像并调整大小. imagecopy() imagecopy() 函数用于拷贝图像或图像 ...

  4. hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS

    题面 题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最 ...

  5. 使用Aliyun Docker 容器镜像/注册表服务

    1.前往阿里云容器镜像服务创建相关资源. 2.登录你的仓库,账户名+公共地址 docker login --username=xxxxxxxxx@aliyun.com registry.cn-hang ...

  6. 对JVM还有什么不懂的?一文章带你深入浅出JVM!

    本文跟大家聊聊JVM的内部结构,从组件中的多线程处理,JVM系统线程,局部变量数组等方面进行解析 JVM JVM = 类加载器(classloader) + 执行引擎(execution engine ...

  7. C-C语言概述

    1.数据+算法=程序. 2.C语言程序是由一个或多个函数组成的,函数是由语句组成的,语句是由关键字,标识符,运算符,数据组成的:语句可分为:声明语句,赋值语句,控制语句,函数语句,空语句. 3.#in ...

  8. Android学习——碎片Fragment的使用

    一.碎片的简单用法(实现在一个活动中添加两个碎片,并让这两个碎片平分活动空间) 1.新建一个FragmentTest项目: 新建一个左侧碎片布局left_fragment.xml,代码如下:(只放置一 ...

  9. WPF自定义动画控件 风机

      一:创建WPF项目 二:在项目下添加文件Themes,在此文件下添加新项 ”资源词典“取名为 Generic.xaml  注意大小写,之前遇到因为大小写不对应,导致出错的情况Generic.xam ...

  10. PHP在Linux的Apache环境下乱码解决方法

    在windows平台编写的php程序默认编码是gb2312 而linux和apche默认的编码都是UTF-8 所以windows平台编写的php程序传到linux后,浏览网页中文都是乱码. 如果手工将 ...