当前位置:文档之家› 数据库优化及性能.

数据库优化及性能.



• 逻辑存储结构----块(block) • 块是最小的数据管理单位,也是执行输入输出
操作时的最小单位.相对应地,操作系统执行输入输 出操作的最小单位是操作系统块. • 块的大小是操作系统块大小的整数倍.以 Windows 2000为例,操作系统块的大小是4kb,所 以块的大小可以是4kb,8kb,16kb等 • 如果块的大小是4kb,EMP表每行的数据占100 个字节.如果某个查询语句只返回1行数据,那么,在 将数据读入到数据高速缓存时,读取的数据量是 4kb而不是100个字节
减少访问数据库的次数
• • 方法1 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; 方法2 SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 342; SELECT EMP_NAME , SALARY , GRADE FROM EMP WHERE EMP_NO = 291;

• 逻辑存储结构----段(segment) • 段用于存储表空间中某一种特定的具有独立存 储结构的对象的所有数据,它由一个或多个区组成. • 段的几种类型: • ● 表段(数据段) • ● 索引段 • ● 临时段 • ● 回退段

• 逻辑存储结构----区(extent) • 区是由物理上连续存放的块构成的.区是 Oracle存储分配的最小单位,由一个或多个块组成 区,由一个或多个区组成段.当在数据库中创建带有 实际存储结构的方案对象(如表,索引,簇)时,Oracle 将为该方案对象分配若干个区,以便组成一个对应 的段来为该方案对象提供初始的存储空间.当段中 已分配的区都写满后,Oracle就为该段分配一个新 的区,以便容纳更多的数据.
Oracle SQL性能优化
准备
• Oracle存储结构 • ● 逻辑存储结构 • 由块,区,段,表空间等组成 • 块区段表空间数据库 • ● 物理存储结构 • ▪ 控制文件 • ▪ 数据文件 • ▪ 重做日志文件等
表空间
• 逻辑存储结构----表空间(tablespace) • 表空间是最大的逻辑单位.一个数据库可以有 多个表空间,一个表空间可以包含多个数据文件(一 个数据文件只能属于一个表空间).任何方案对象都 被存储在表空间的数据文件中,虽然不能被存储在 多个表空间中,但可以被存储在多个数据文件中.表 空间分系统表空间和非系统表空间两类. 系统表空 间包括SYSTEM表空间和SYSAUX表空间,其余的 表空间就是非系统表空间效,执行时间156.3秒) SELECT … FROM EMP E
WHERE SAL > 50000
AND JOB = ‘MANAGER' AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO); (高效,执行时间10.6秒) SELECT … FROM EMP E WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO)
• •
原因: 当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用 率, 绑定变量 , 读数据块等等. 由此可见, 减少访问数据库的次数 , 就能实际上减少 ORACLE的工作量.
删除
• 删除重复记录
最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X

用NOT EXISTS替代NOT IN 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接 (Outer Joins)或NOT EXISTS. 例如:
WHERE X.EMP_NO = E.EMP_NO);
用TRUNCATE替代DELETE 当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT 事务,ORACLE会将数据恢复到删除之前的状态(准确地说是 恢复到执行删除命令之前的状况) 而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调 用,执行时间也会很短. (译者按: TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML)
数据库性能优化的内容
(1)调整数据结构的设计。 (2)调整应用程序结构设计。 (3)调整数据库SQL语句。(本次重点关注) (4)调整服务器内存分配。 (5)调整硬盘I/O,这一步是在信息系统开发之前完成的。 (6)调整操作系统参数。
SQL语句优化
• • • • SQL语句优化的具体方法 (1)SQL语句的开发技巧 (2)索引的使用 (3)开发SQL中的一些建议
选择最有效率的表名顺序
• 例如: 表 TAB1 16,384 条记录 表 TAB2 1 条记录 选择TAB2作为基础表 (最好的方法)
select count(*) from tab1,tab2 执行时间0.96秒
选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒 • • 原因: ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表 (基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少 的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表 (FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最 后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
相关主题