ORACLE性能优化之二PPT课件

  • 格式:ppt
  • 大小:323.00 KB
  • 文档页数:42

下载文档原格式

  / 42
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE性能优

SQL优化
主讲: YOUNGER
1 05.11.2020
数据规模库分类(一)
数据库描述 示例库(Sample) 测试库(Experiment orTest) 微型库(Tiny) 超小型库(Very Small) 小型库(Small) 中底等库(Moderate)
数据规模 小于1M 100M到2G 小于1G 1G到5G 5G到10G 10G到50G
时间
性能指标
存储 内存使用与硬盘空间
4 05.11.2020
性能调优的二个方向
CPU CPU使用率达到60%到75%
I/O I/O操作达到80%左右
5 05.11.2020
性能优化三板斧
一.优秀的设计(算法)与SQL语句 二.存储与索引 三.数据库配置与系统参数
6 05.11.2020
16 05.11.2020
高效的SQL语句(4)
SELECT子句中避免使用‘*’
– 当你想在SELECT子句中列出所有的COLUMN时,使用动态 SQL列引用 ‘*’ 是一个方便的方法。不幸的是,这是一个 非常低效的方法。实际上,Oracle在解析的过程中, 会将 ‘*’依次转换成所有的列名,这个工作是通过查询数据字 典完成的,这意味着将耗费更多的时间
INSERT语句
用户可以用INSERT语句将新记录 插入到指定的一个表中。执行INSERT 语句时,系统将试着将这些值填入到相 应的列中,这时如果有主键或其它约束 条件则会进行合法性判断.如有索引则 需要重排索引.
性能要点:索引起负作用
11 05.11.2020
DELETE语句
DELETE语句用来删除已知表中的 行。如同UPDATE语句中一样,所有满 足WHERE子句中条件的行都将被删除。
– 如果有多个表的列名是一样的,那么使用ALIAS可以减少解 析COLUMN的时间
17 05.11.2020
高效的SQL语句(5)
减少访问数据库的次数 – 当执行每条SQL语句时,Oracle在内部执行了许多工作:解 析SQL语句,估算索引的利用率、绑定变量、读数据块等等。 由此可见,减少访问数据库的次数,就能实际上减少Oracle 的工作量 – SELECT emp_name, salary, grade FROM emp WHERE emp_no=342; SELECT emp_name, salary, grade FROM emp WHERE emp_no=291; – 合并成 – SELECT a.emp_name, a.salary, a.grade, b.emp_name, b.salary, b.grade FROM emp a, emp b WHERE a.emp_no=342 AND b.emp_no=291;
14 05.11.2020
高效的SQL语句(2)
如果有3个以上的表连接查询,那就需要选择交叉表 (intersection table)作为基础表,交叉表是指那个被其他表所引 用的表 SELECT * FROM location l, category c, emp e WHERE e.emp_no BETWEEN 1000 AND 2000 AND e.cat_no=c.cat_no AND e.locn=l.locn 效率高于 SELECT * FROM emp e, location l, category c WHERE e.emp_no BETWEEN 1000 AND 2000 AND e.cat_no=c.cat_no AND E.locn=l.locn
15 05.11.2020
高效的SQL语句(3)
WHERE子句中的连接顺序 – ORACLE采用自下而上的顺序解析WHERE子句,根据这个原 理,表之间的连接必须写在其他WHERE条件之前,那些可以 过滤掉最大数量记录的条件必须写在WHERE子句的末尾 – SELECT … FROM emp e WHERE sal>50000 AND job=‘MANAGER’ AND 25<(SELECT COUNT(*) FROM emp WHERE mgr=e.empno) – 效率低于 – SELECT… FROM emp e WHERE 25<(SELECT COUNT(*) FROM emp WHERE mgr=e.empno) AND sal>50000 AND job=‘MANAGER’;
性能要点:索引起正作用
9 05.11.2020
UPDATE语句
UPDATE语句允许用户对已知的表 中对符合条件的现有行相关列值进行修 改。UPDATE首先要定位需要修改 的记录,所以它的元操作就包括了SE LECT的操作.
性能要点:索引正作用,新值使用 子查询需要特别注意
10 05.11.2020
算法
编 程 Baidu Nhomakorabea 算法 + 数据结构
7 05.11.2020
SQL最基本的数据操作语句
SELECT UPDATE INSERT DELETE
8 05.11.2020
SELECT语句
SELECT语句可以从一个或多个表 中选取特定的行和列并以虚拟表的形式 返回结果集,通常还会用到表连接, ORDER BY排序与GROUP BY分组等操 作.因为查询,检索与统计数据是数据 库中最重要的功能,所以SELECT语句 在SQL中是工作量最大的部分。
12 05.11.2020
高效的SQL语句写法
(以下部分内容摘录于罗宇辉<ORACLE性能调优基础>)
13 05.11.2020
高效的SQL语句(1)
选择最有效率的表名顺序(只在基于规则的优化器中有效) – ORACLE的解析器按照从右到左的顺序处理FROM子句中的表 名,因此FROM子句中写在最后的表(基础表 driving table)将 被最先处理。在FROM子句中包含多个表的情况下,你必须 选择记录条数最少的表作为基础表 – 如果tab2中记录数明显高于tab1,用 SELECT COUNT(*) FROM tab2, tab1 效率明显优于 SELECT COUNT(*) FROM tab1, tab2
2 05.11.2020
数据库规模分类(二)
数据库描述
数据规模
中等库(Medium)
50G到100G
大型库(Large)
100G到200G
超大库Very large (VLDB) 200G到300G
极大库(Extremely)
300G到500G
巨大库(Massive)
500G以上
3 05.11.2020