oracle 优化--索引

1、事务sql

一、简介数据库

事务是数据处理的核心,是业务上的一个逻辑单元,它可以保证其中对数据全部的操做,要么所有成功,要么所有失败。DBMS经过事务的管理来协调用户的并发行为,减小用户访问资源的冲突。并发

wKioL1kRQaaQSfveAACABBDw1h0209.png-wh_50

 

1)显示提交:当事务遇到COMMIT指令时,将结束事务并永久保存全部的更改的数据。oracle

2)显示回滚:当事务遇到ROLLBACK指令时,也将结束事务的执行,可是此时它回滚全部更改的数据到事务开始时的原始值,即取消更改,数据没有变化。ide

3)DDL语句:一旦用户执行了DDL(数据定义语言,如createdrop等)语句,则以前的全部DML(数据操做语言)操做做为一个事务提交,这种提交称为隐示提交。函数

4)正常结束程序:若是oracle数据库应用程序正常结束,如使用sqlplus工具更改了数据,而正常退出该程序(exit),则oracle自动提交事务。工具

5)非正常地结束程序:当程序崩溃或意外终止时,全部数据更改都被回滚,这种回滚成为隐示回滚。sqlserver

 

二、事务的特色性能

事务有4个特性,简写为ACID特性。spa

1)原则性:以转帐操做为例,转出帐户余额减小和转入余额增长是两个DML语句,可是必须做为一个不可分割的完整操做。要么同时成功,要么同时失败,只转出而没有转入显然是不可接受的。

2)一致性:不管是在事务前、事务中、事务后,数据库始终处于一致的状态。例如:转帐前分别是20001000,总金额是3000,转帐300后分别是17001300,总金额仍是3000.这就叫作一致性。不一致就是在某个时间点查询到的总金额不是3000.

3)隔离性:在某个时间段,确定有不少人都在转帐,每一个人的转帐都是在本身的事务中,因此在一个数据库中,会有不少事物同时存在。虽然同时存在不少事物,可是事物之间不会相互影响。

4)持久性:若是事物提交成功,则数据修改永远生效,若是是回滚,则数据彻底没有没修改,就至关于没有这件事情发生。

 

2、索引

 

1.索引是oracle的一个对象,是与表关联的可选结构,提供了一种快速访问数据的途径,提升了数据库检索性能。索引使数据库程序无需对整个表进行扫描,就能够在其中找到所须要的数据。就像书的目录,能够经过目录快速查找所需信

息,无需阅读整本书。

 

 

2.、索引的分类

 

1)B树索引结构

四、建立索引的语法

create [unique] index 索引名称 on 表名(列名)[tablespace 表空间名称]

 

解释:

[unique]用于指定惟一索引,默认状况下为非惟一索引

[tablespace]为索引指定表空间

 

1)建立标准索引

SQL> CREATE INDEX index_name ON tablename(columnname)

     TABLESPACE index_tbs;

2重建索引

SQL> ALTER INDEX index_name REBUILD;

 

合并索引碎片

SQL>ALTER INDEX index_name COALESCE;

 

3删除索引

SQL> DROP INDEX index_name;

1

1)在雇员表(emp)中,为雇员名称(ename)列建立b树索引。

wKiom1kRQpzyBwvYAAArgtD13K0262.png-wh_50

五、建立惟一索

确保在定义索引的列中没有重复值

Oracle 自动在表的主键列上建立惟一索引

使用CREATE UNIQUE INDEX语句建立惟一索引

语法以下:

SQL> CREATE UNIQUE INDEX index_name

     ON tablename(columnname);

例:在薪水级别(salgrade)表中,为级别编号grade列建立惟一索引。

wKiom1kRQseT_FpmAAA2OY6Cseo447.png-wh_50

六、反向键索引

与常规B树索引相反,反向键索引在保持列顺序的同时反转索引列的字节。反向键索引经过反转索引键的数据值,使得索引的修改平均分布到整个索引树上。主要应用于所多个实例同时访问一个数据库的场景中

 

六、位图索引

位图索引适合低于基数的列,即该列的值是有限的几个。例如:雇员表中的工种(job)列,即使是几百万条雇员记录,工种也是有限的。Job列能够做为位图索引,相似的还有图书表中的图书类别列等。

wKioL1kRQxDz0alVAABn_QgHpuM752.png-wh_50

 

位图索引不直接存储ROWID,而是存储字节位到ROWID的映射,减小响应时间,节省空间占用。位图索引不该当在频发发生insertupdatedelete操做的表上使用,这是由于单个位图索引指向表的不少数据行,当修改索引项时须要将其指向的数据行所有锁定,这会严重下降数据库的并发处理能力。位图索引适合用于数据仓库和决策支持系统中

 

例:在雇员emp表中,为工种(job)列建立位图索引。

基本语法:

CREATE BITMAP  INDEX emp_job_bit_idx ON emp(job);

wKioL1kRQ0Czyf1aAAAGpe5zTy8997.png-wh_50

 

六、组合索引
相似sqlserver的复合索引,在表内多列上建立索引。索引中的列没必要与表中的列顺序一致,也没必要相互邻接。

 

 

 

六、基于函数的索引

须要建立的索引须要使用表中一列或多列的函数或表达式,也能够将基于函数的索引建立为B树索引或位图索引。

基本语法:

SQL> CREATE INDEX emp_ename_upper_idx

 

ON tablename (UPPER(columnname));

 

:在雇员(emp)表中,为雇员名称(ename)列建立小写函数索引

wKiom1kRQ5zAvdtoAAAgLYIG83w268.png-wh_50

wKiom1kRQ8DzGtNiAAEURzTg0I0164.png-wh_50

 

六、建立索引的原则

频繁搜索的列能够做为索引列

常常排序,分组的列能够做为索引

常常用做链接的列(主键/外键)能够做为索引

将索引放在一个单独的表空间中,不要放在有回退段、临时段和表的表空间中

对于大型索引而言,考虑使用NOLOGIN子句建立大型索引。

根据业务数据发生频率,按期从新生成或从新组织索引,进行碎片整理。

相关文章
相关标签/搜索