oracle优化

sql语句 优化方式:

1select 语句中避免用"*"

    oracle在解析时,会将“*”依次转换成所有的列名(数据字典完成)耗时

2尽量多用commit语句

  及时提交,释放资源

3用exists代替in

 in子句会执行表的遍历,效率非常低

4尽量使用共享池已有的sql语句

为了不解析相同的sql语句,在第一次解析之后,oracl将sql语句存放在共享池的内存中

减少I/O操作,提高I/O操作效率,是数据库优化的主要内容

索引 优化:

索引是把表的一些列值提取出来组织的,当使用索引时,不是先查询基表,而是先检索索引。找到满足条件后,用物理地址返回到基表中将其他数据读取出来,完成查询。

创建单列索引:

create index employ_name on scott.emp(empname);
View Code

创建多列索引:

create index emplouyee_noname on scott.emp(empname,empno);
View Code

重建索引:

alter index employ_name rebuild online;
View Code

同时使用索引避免对整个表的访问,减少了很多磁盘I./O操作。

数据簇 优化:

数据簇是将相关或相似的行在物理上存储在一起,有索引数据簇和散列数据簇两种。由于物理上接近,查询时会减少磁头转动,从而加快检索速度。

创建散列簇:

create cluster position(id number(1))
size 100
hash is id
hashkeys 10000;
View Code

在散列上创建表:

create table depost2(
 postno char(3) not null,
 postname varchar2(30) unique null,
 ifvoid number(1) default 0 check(ifvoid between 0 and 1)

)
cluster position(ifvoid);
View Code

防止访问冲突:

1 加锁

在一个用户读取时,其他用户不能进行操作

 锁类型 6种:共享锁(row share),独占锁(row exclusive),共享修改(row update),共享表锁(share) 共享行锁独占表锁(share row exclusive) ,独占表锁(exclusive)

eg:

--独占表锁
lock table scott.emp in exclusive mode;
View Code

2合理设计事务

在事务处理过程中,确保读取数据一致性

3分散文件

表表数据和索引放在不同的磁盘上

原文地址:https://www.cnblogs.com/shuaif/p/3505566.html