Oracle 学习笔记(四)

一、高效 SQL 语句原则

  • 在where 中用 = 关系运算时
  • 避免用函数在关系运算中,除非你使用函数建立索引
  • 尽量不要隐式转化数据类型,数据类型一定要匹配
  • 尽量将一句SQL分成多个语句完成
  • 不能差分的请用UNION ALL 来组合
  • 条件确定的子查询  Exist 适合于外表小,内表大    in  适合于外表大,内表小
  • 使用视图的注意事项
  • 复杂视图的连接要小心,尤其有外键的时候
  • 当查询的是视图中引用的部分表的时候,请不要使用视图,或者建立新的更小的表
  • 存储中间结果
  • 对查询中可能多次调用的结果集,请保存
  • 考虑使用物化视图
  • 将复杂的不能优化的查询分阶段完成
  • 尽量减少访问数据的次数
  • 使用 case 语句
  • 使用高级分组rollup,cube
  • 使用存储过程
  • 使用 RETURNING 子句

二、全表扫描

  • 全表扫描:将高水位线下的数据块都读一遍。
  • DB_FILE_MULTIBLOCK_READ_COUNT 参数决定扫描的速度,该参数的值乘以块的
  • 大小应该小于操作系统的最大io
  • 因为范围是连续的块,所以全表扫描会连续的读,效率很高

三、何时会使用全表扫描

1.表小

2.索引缺少,条件判定列上没有索引

3.使用hint,强制使用全表扫描

4.读的数据比重大。一般超过 10%的数据要读取就会选择全表扫描

5.并行查询,和索引是对立的,两者必须选择一个

 四、全表扫描的优化
   1.回收高水位线
   2.DB_FILE_MULTIBLOCK_READ_COUNT 加大
   3.使每个块装的数据更多,减少 pctfree
   4.使用并行查询
   alter system set db_file_multiblock_read_count=32;修改参数配置,默认为16 个块
   alter table t1 pctfree 0; 将每个数据块都装满
   alter table t1 move tablespace users;  移动表空间

五、 数据库查询的优化,Hints
    Hints,即提示,强制该语句以我们指定的方式运行,作用范围是当前语句,对后面语句不影响。书写时,一定要放在第一个单词(select) 的后面。Hints 的写法有两种:  /*+ 提示 */  , --+ 提示

六、SQL  查询优化

1.尽量避免在一个复杂查询里面使用 LIKE ‘%parm1%‘     百分号会导致相关列的索引无法使用,最好不要用.

    • 在前端进行下拉框的输入搜索
    • 在后端进行查询范围控制,不查询无关数据

2. 索引

    • 数据量大的时候,建立索引
    • 避免对索引进行计算操作
    • 避免在索引列上使用 not, <>, !=
    • .避免在索引列上使用 is null 和 is not null
    • 避免在索引列上使用数据类型转换
    • .避免在索引列上使用函数
    • 避免在索引列上使用空值

3. 复杂查询     可将复杂查询进行拆分,分步进行

4. 尽量使用 union all    union 会对数据进行排序,并去除重复的行,比较消耗资源    union all 则不进行排序,不去除重复的行

5. 在where 语句中合理使用 in , not in ,exist,not exist    Exist 适合于外表小,内表大    in  适合于外表大,内表小

6. 排序    避免使用消耗资源的操作,带有 distinct, uinon,minus,intersect,order by 的语句    会启动 sql 引擎,distinct  需要一次排序,而其它至少需要执行2次排序。

7. 临时表    慎重使用临时表,可以极大的提高性能。

时间: 2024-08-08 13:56:07

Oracle 学习笔记(四)的相关文章

oracle学习笔记(四)

1.常用函数 1)字符函数 lower  全部转为小写 select lower('HELLO') from dual; -->hello upper  全部转为大写 select upper('hello') from dual; HELLO concat       连接两个字符串 select concat('hello','world') from dual;--> helloworld initcap       首字母转为大写 select initcap('hello') fro

oracle学习笔记 存储及raid技术概述

oracle学习笔记 存储及raid技术概述 本课以oracle数据库所运行的环境,讲一下存储和raid技术. 一)oralce生产环境里的结构 先说一下oracle所在的环境. 有一种结构: 两个服务器.两个光纤存储交换机.两个存储, 它们通过网线相互连接在一起. 每个服务器接两个交换机, 每个交换机连两个服务器同时连两个存储, 每个存储和两个交换机有连接. 这是oracle数据库相对比较典型的正规的运行环境. 每个服务器上都装Linux和oracle数据库软件, oracle数据库建在存储上

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

oracle学习笔记 SQL语句执行过程剖析讲课

oracle学习笔记 SQL语句执行过程剖析讲课 这节课通过讲述一条SQL语句进入数据库 和其在数据库中的整个的执行过程 把数据库里面的体系结构串一下. 让大家再进一步了解oracle数据库里面的各个进程.存储结构以及内存结构的关联关系. 首先来讲整个体系中有客户端.实例和数据库 数据库里有三类文件 控制文件ctl.数据文件dbf.日志文件log 实例中SGA有六大池子 第一大内存区shared pool即共享池 第二大内存区buffer cache 第三块是redo log 我们主要讲上面的三

oracle学习笔记 swap

oracle学习笔记 swap 这节课老师讲了很多,虽说看起来很多都没有用,但老师讲的仔细,我们应该认真了解一下. 这节课主要内容是硬盘的工作机制,工作原理, 以一些系统性能分析工具为线,并附带讲了系统中cpu.内存的工作机制. 对以后进行orace的优化,操作系统的学习非常有帮助. 此前讲过计算机的工作机制. 程序在硬盘上,执行时首先被调入内存成为进程,cpu按照时间片循环的轮回的执行各个进程. 表面上看各个进程都在运行,实际上很多进程都被时间片阻挡在cpu之外. 从宏观上看多个进程同时在执行

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了