oracle数据库优化

以我现在的工作经验,我主要认识三种方式进行在数据库中表中数据较大的情况下进行调优。1.最直接,也是最普遍的方式,分页,查询一定范围内的数据,加快查询数据的速度。例如:select * from ( 查询语句 ) where rownum <= ? 。2.数据库配置,索引,相信大家也不陌生,创建索引的好处是加快数据的查找速度,这个很明显,但是有利也有弊,在加快查询速度的同时,它的创建和维护随着数据量的增大,时间也跟着加大。其二,索引需要占物理空间。其三,当对表的增、删、改,索引也要动态的维护,这样就降低数据库的维护速度。在建表的时候,还是要考虑到哪些字段可以加索引,哪些字段不可以。这是我认识的前两种方式,那么我认识的最后一种方式就是表分区,这种方式通常是数据真的太多了,查询速度真的太慢了,可以去用用。那么什么是数据库分区呢?分区原理其实很简单,就是对数据库表进行时间上的划分,你可以一个月为一个区这样子来分区,也可以一年为一个区来分区,达到自己的目的就好。在查阅更多的资料后,原来还可以以某个字段的数量进行划分。由于平时没多大接触过分区(工作上还没有用过),在此,我就用几个例子来分析下,添加分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('20016-05-01','YYYY-MM-DD'));

删除分区

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
截断分区(删除数据不删除分区)

ALTER TABLE SALES TRUNCATE PARTITION P2;
有兴趣可以看看 点击打开链接

还有两种解决数据量过大的方式,装数据库的时候配置好数据库,写更高效的sql语句,这两点,我觉得很基础。

补充

相同功能、性能的sql语句

oracle采用共享内存SGA的机制,因此oracle会对每个不同写法的sql进行分析,并且占用共享内存,如果书写格式完全相同,则oracle只分析一次,遇到相同书写格式的sql,会直接从共享内存中获取结果集,这样减少共享池的开销以及代码的复用。

表名顺序

多表查询时需要选择最有效的表名顺序,oracle的解析器按照从右到左的顺序处理from子句的表名,因此写在最后的那张表最先处理。

查询条件顺序

oracle采用自下而上的顺序解析where子句,那些可以过滤最大数量的记录的条件适合写在where子句末尾。

用truncate替代delete

当删除表中的记录时,在通常情况下,回滚段用来存放可以被恢复的信息,如果没有commit事务,oracle会将数据恢复到删除之前,而当运行truncate时,

回滚段不再存放任何可被恢复的信息,当命令运行后,数据不能被恢复,执行的时间短,truncate是ddl不是dml,dml(data manipulation language)数据操纵语言:

适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等,ddl(data definition language)数据定义语言:

适用范围:对数据库中的某些对象(例如,database,table)进行管理,如create,alter和drop。

两者区别在于

1.dml可以手动控制事务的开启、提交和回滚。

2.ddl操作时隐性提交的,不能回滚。

用exists替代in

用in将启用全表扫描,使用exists将利用索引,提高查询效率。

用exists替换distinct

避免在索引列上使用is null和is not null

如果索引包含任务可以为空的列,oracle将无法使用该索引

用where子句替换having子句

避免使用having子句,having只会在检索所有记录之后才对结果集进行过滤,如果能通过where子句限制记录的数目,那就能减少这方面的开销。

having中的条件一般用于对一些集合函数的比较,如count()。

数据库执行sql语句时

1.解析sql语句

2.估算索引的利用率

3.绑定变量

4.读数据块



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值