- 0
- 0
- 约2.27千字
- 约 16页
- 2018-11-12 发布于广西
- 举报
目标 数据库性能优化的内容 不同类型系统的优化 SQL语句的优化规则 SQL语句优化的具体方法 本课程版权归北风网所有 欢迎访问我们的官方网站 讲师:文心 ORACLE管理与应用 北风网项目培训 Oracle优化概述及SQL语句优化规则 (1)调整数据结构的设计。 (2)调整应用程序结构设计。 (3)调整数据库SQL语句。 (4)调整服务器内存分配。 (5)调整硬盘I/O,这一步是在信息系统开发之前完成的。 (6)调整操作系统参数。 数据库性能优化的内容 1.在线事务处理信息系统(OLTP) 这种类型的信息系统一般需要有大量的Insert、Update操作。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的Oracle数据库需要主要考虑下述因素或参数: (1)数据库回滚段是否足够? (2)是否需要建立Oracle数据库索引、聚集、散列? (3)系统全局区(SGA)大小是否足够? (4)SQL语句是否高效? 不同类型系统的优化 2.数据仓库系统(Data Warehousing) 这种信息系统的主要任务是从Oracle的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的Oracle数据库着重考虑下述因素或参数: (1)是否采用B*-索引或者bitmap索引? (2)是否采用并行SQL查询以提高查询效率? (3)是否采用PL/SQL函数编写存储过程? (4)是否有必要建立并行数据库,来提高数据库的查询率。 (1)去掉不必要的大表、全表扫描。不必要的大表、全表扫描会造成不必要的输入输出,而且还会拖垮整个数据库; (2)检查优化索引的使用 这对于提高查询速度来说非常重要; (3)检查子查询,考虑SQL子查询是否可以用简单连接的方式进行重新书写; (4)调整PCTFREE和PCTUSED等存储参数优化插入、更新或者删除等操作; (5)考虑数据库的优化器; (6)考虑数据表的全表扫描和在多个CPU的情况下考虑并行查询。 SQL语句的优化规则 SQL语句优化的具体方法 索引的使用 SQL语句排序优化 选择联合查询的联合次序 SQL子查询的调整 1、索引的使用 (1)尽量使用索引 是全表扫描还是索引范围扫描主要考虑SQL的查询速度问题。试比较下面两条SQL语句: ①语句A: SELECT dname,deptno FROM dept WHERE deptno NOT IN(SELECT deptno FROM emp); ②语句B: SELECT dname,deptno FROM dept WHERE NOT EXISTS(SELECT deptno FROM emp WHERE dept.deptno = emp.deptno); (2)索引不起作用的情况 ①存在数据类型隐形转换 ②列上有数学运算 ③使用不等于()运算 ④使用substr字符串函数 ⑤‘%’通配符在第一个字符 ⑥字符串连接(||) (3)函数的索引 例如,日期类型是经常用到的,而且在SQL语句中会使用to_char函数以查询具体的的范围日期。如: select * from staff_member where TO_CHAR(birth_day,’YYYY’)=’2003’; 可以建立基于函数的索引如: CREATE INDEX Ind_emp_birth ON staff_member (to_char((birth_day,’YYYY’)); 2.SQL语句排序优化 排序发生的情况如下: SQL中包含group by 子句 SQL 中包含order by 子句 SQL 中包含 distinct 子句 SQL 中包含 minus 或 union操作 3.选择联合查询的联合次序 联合查询中如涉及到多个表的字段关联及查询,其SQL查询语句联合次序的不同写法,会导致语句对各表具体操作的步骤有不同的次序,所以虽然执行结果相同,但执行效率却不同。 4.SQL子查询的调整 (1)关联子查询和非关联子查询 非关联查询的开销——非关联查询时子查询只会执行一次,而且结果是排序好的,并保存在一个Oracle的临时段中,其中的每一个记录在返回时都会被父查询所引用。在子查询返回大量的记录的情况下,将这些结果集排序,以及将临时数据段进行排序会增加大量的系统开销。 关联查询的开销——对返回到父查询的记录来说,子查询会每行执行一次。因此,必须保证任何可能的时候子查询用到索引。 (2)在子查询中慎重使用IN或者NOT IN语句 在子查询中慎重使用IN或者NOT IN语句,使用where (NOT)exists的效果要好的多
原创力文档

文档评论(0)