没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Oracle SQL 性能优化方法探讨
1 综述...................................................................................................................................................2
2 表分区的应用...................................................................................................................................2
3 访问 Table 的方式............................................................................................................................3
4 共享 SQL 语句.................................................................................................................................3
5 选择最有效率的表名顺序..............................................................................................................5
6 WHERE 子句中的连接顺序........................................................................................................6
7 SELECT 子句中避免使用’*’...........................................................................................................6
8 减少访问数据库的次数..................................................................................................................7
9 使用 DECODE 函数来减少处理时间............................................................................................8
10 整合简单,无关联的数据库访问...................................................................................................8
11 删除重复记录.................................................................................................................................9
12 用 TRUNCATE 替代 DELETE......................................................................................................9
13 尽量多使用 COMMIT...................................................................................................................9
14 计算记录条数...............................................................................................................................10
15 用 Where 子句替换 HAVING 子句.............................................................................................10
16 减少对表的查询...........................................................................................................................11
17 通过内部函数提高 SQL 效率.....................................................................................................11
18 使用表的别名(Alias)...................................................................................................................13
19 用 EXISTS 替代 IN......................................................................................................................13
20 用 NOT EXISTS 替代 NOT IN....................................................................................................13
21 识别低效执行的 SQL 语句.........................................................................................................14
22 使用 TKPROF 工具来查询 SQL 性能状态................................................................................14
23 用 EXPLAIN PLAN 分析 SQL 语句...........................................................................................15
24 实时批量的处理...........................................................................................................................16
TABLENAME
2003Data 2005Data
2004Data
。
。。。。。
1 综述
ORACLE 数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,
需要经过反反复复的过程。在数据库建立时,就能根据应用的需要合理设计分配表空
间以及存储参数、内存使用初始化参数,对以后的数据库性能有很大的益处,建立好
后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不
断地积累经验,从而更好地进行数据库的调优。
数据库性能调优的方法
调整内存
调整 I/O
调整资源的争用问题
调整操作系统参数
调整数据库的设计
调整应用程序
本文针对应用程序的调整,来说明对数据库性能如何进行优化。
2 表分区的应用
对于海量数据的表,可以考虑建立分区以提高操作效率。建立分区一般以关键字
为分区的标志,也可以以其他字段作为分区的标志,但效率不如关键字高。建立分区
的语句在建表时可以进行说明:
create table TABLENAME(<field list>)
partition by range (PutOutNo)
(partition PART1 values lessthan (200312319999)
partition PART2 values lessthan (200412319999)
partition PART3 values lessthan (200512319999)
。。。。。。
建好分区后,数据的逻辑存储方式进行了优化
这样,在进行大部分数据查询,数据更新和数据插入时, Oracle 自动判断操作应
该在哪个分区进行,避免了整表操作,提高了执行的效率
3 访问 Table 的方式
ORACLE 采用两种访问表中记录的方式:
全表扫描
全表扫描就是顺序地访问表中每条记录 . ORACLE 采用一次读入多个数据块
(database block)的方式优化全表扫描.
通过 ROWID 访问表
可以采用基于 ROWID 的访问方式情况,提高访问表的效率, , ROWID 包含了表中记
录的物理位置信息..ORACLE 采用索引(INDEX)实现了数据和存放数据的物理位置
(ROWID)之间的联系. 通常索引提供了快速访问 ROWID 的方法,因此那些基于索引列的
查询就可以得到性能上的提高.
4 共享 SQL 语句
为了不重复解析相同的 SQL 语句,在第一次解析之后, ORACLE 将 SQL 语句存放在
内存中.这块位于系统全局区域 SGA(system global area)的共享池(shared buffer pool)中的
内存可以被所有的数据库用户共享. 因此,当执行一个 SQL 语句(有时被称为一个游标)时,
如果它和之前的执行过的语句完全相同, ORACLE 就能很快获得已经被解析的语句以及
最好的执行路径. ORACLE 的这个功能大大地提高了 SQL 的执行性能并节省了内存的
使用.可是 ORACLE 只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于
多表连接查询.
数据库管理员必须在 init.ora 中为这个区域设置合适的参数,当这个内存区域越大,
就可以保留更多的语句,当然被共享的可能性也就越大了.
当向 ORACLE 提交一个 SQL 语句,ORACLE 会首先在这块内存中查找相同的语句.
这里需要注明的是,ORACLE 对两者采取的是一种严格匹配,要达成共享,SQL 语句必须
完全相同(包括空格,换行等).
共享的语句必须满足三个条件:
字符级的比较:
当前被执行的语句和共享池中的语句必须完全相同.例如:
SELECT * FROM EMP;
和下列每一个都不同
SELECT * from EMP;
Select * From Emp;
SELECT * FROM EMP;
两个语句所指的对象必须完全相同:
例如:
用户 对象名 如何访问
Jack sal_limit private synonym
Work_city public synonym
Plant_detail public synonym
Jill sal_limit private synonym
Work_city public synonym
Plant_detail table owner
下列 SQL 语句不能在这两个用户之间共享.
select max(sal_cap) from sal_limit;
原因
每个用户都有一个 private synonym - sal_limit , 它们是不同的对象
下列 SQL 语句能在这两个用户之间共享.
select count(*) from work_city where sdesc like 'NEW%';
原因:两个用户访问相同的对象 public synonym - work_city
下列 SQL 语句不能在这两个用户之间共享.
select a.sdesc,b.location from work_city a , plant_detail b where a.city_id =
b.city_id
原因:用户 jack 通过 private synonym 访问 plant_detail 而 jill 是表的所有者,对象不
同.
两个 SQL 语句中必须使用相同的名字的绑定变量(bind variables)
剩余16页未读,继续阅读
资源评论
cailibin
- 粉丝: 4
- 资源: 7018
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AIS2024 valid
- 最入门的爬虫代码 python.docx
- 爬虫零基础入门-爬取天气预报.pdf
- 最通俗易懂的 MongoDB 非结构化文档存储数据库教程.zip
- 以mongodb为数据库的订单物流小项目.zip
- 腾讯云-mongodb数据库, 项目部署.zip
- 腾讯 APIJSON 的 MongoDB 数据库插件.zip
- 理解非关系型数据库和关系型数据库的区别.zip
- 操作简单的Mongodb网页web管理工具,基于Spring Boot2.0支持mongodb集群.zip
- tms-mongodb-web,提供访问mongodb数据的REST API和可灵活扩展的mongodb web 客户端.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功