`

oracle索引的增删改查

阅读更多

 

 

索引,索引的建立、修改、删除 

索引
索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。下面给出建立索引的方法和要点。
§3.5.1 建立索引
1. CREATE INDEX命令语法:

 

 

 

CREATE INDEX
CREATE [unique] INDEX [user.]index
ON [user.]table (column [ASC | DESC] [,column
[ASC | DESC] ] ... )
[CLUSTER [scheam.]cluster]
[INITRANS n]
[MAXTRANS n]
[PCTFREE n]
[STORAGE storage]
[TABLESPACE tablespace]
[NO SORT]
Advanced

 

 

 

其中:
   schema ORACLE模式,缺省即为当前帐户
   index 索引名
   table 创建索引的基表名
   column 基表中的列名,一个索引最多有16列,long列、long raw
              列不能建索引列
   DESC、ASC 缺省为ASC即升序排序
   CLUSTER 指定一个聚簇(Hash cluster不能建索引)
   INITRANS、MAXTRANS 指定初始和最大事务入口数
   Tablespace 表空间名
   STORAGE 存储参数,同create table 中的storage.
   PCTFREE 索引数据块空闲空间的百分比(不能指定pctused)
   NOSORT 不(能)排序(存储时就已按升序,所以指出不再排序)

 

 

 

 

 

2.建立索引的目的:

 

 

 

建立索引的目的是:
l 提高对表的查询速度;
l 对表有关列的取值进行检查。

 

 

 

但是,对表进行insert,update,delete处理时,由于要表的存放位置记录到索引项中而会降低一些速度。
注意:一个基表不能建太多的索引;
      空值不能被索引
      只有唯一索引才真正提高速度,一般的索引只能提高30%左右。

 

 

 

   Create index ename_in on emp (ename,sal);

 

 

 

例1:商场的商品库表结构如下,我们为该表的商品代码建立一唯一索引,使得在前台POS收款时提高查询速度。
Create table good(good_id number(8) not null,/* 商品条码 */
                   Good_desc varchar2(40), /* 商品描述 */
                   Unit_cost number(10,2) /* 单价 */
                   Good_unit varchar2(6), /* 单位 */
                   Unit_pric number(10,2) /* 零售价 */
                   );

 

 

 

注:提高查询速度的方法还有在表上建立主键,主键与唯一索引的差别
在于唯一索引可以空,主键为非空,比如:

 

 

 

Create table good(good_id number(8) primary key,
                    Good_desc Varchar2(40),
                    Unit_cost number(10,2),
                    Good_unit char(6),
                    Unit_pric number(10,2)
                   );

 

 

 

§3.5.2 修改索引
对于较早的Oracle版本,修改索引的主要任务是修改已存在索引的存储参数适应增长的需要或者重新建立索引。而Oracle8I及以后的版本,可以对无用的空间进行合并。这些的工作主要是由管理员来完成。

 

 

 

简要语法结构如下,更详细的语法图见电子文档《Oracle8i Reference 》 中的 Alter index.

 

 

 

ALTER [UNIQUE] INDEX [user.]index
[INITRANS n]
[MAXTRANS n] 
REBUILD 
[STORAGE n]

 

 

 

其中:
REBUILD 是 根据原来的索引结构重新建立索引,实际是删除原来的索引后再重新建立。

 

 

 

提示:DBA经常用 REBUILD 来重建索引可以减少硬盘碎片和提高应用系统的性能。

 

 

 

例:
alter index pk_detno rebuild storage(initial 1m next 512k);

 

 

 

ALTER INDEX emp_ix REBUILD REVERSE;

 

 

 

 

 

Oracle8i 的新功能可以对索引的无用空间进行合并,它由下面命令完成:

 

 

 

ALTER INDEX . . . COALESCE;

 

 

 

例如:

 

 

 

ALTER INDEX ename_idx COALESCE;

 

 

 

§3.5.3 删除索引
当不需要时可以将索引删除以释放出硬盘空间。命令如下:

 

 

 

DROP INDEX [schema.]indexname

 

 

 

例如:

 

 

 

sql> drop index pk_dept;

 

 

 

注:当表结构被删除时,有其相关的所有索引也随之被删除。

 

 

 

§3.6 新索引类型
Oracle8i为了性能优化而提供新的创建新类型的索引。这些新索引在下面介绍:

 

 

 

§3.6.1 基于函数的索引
基于函数的索引就是存储预先计算好的函数或表达式值的索引。这些表达式可以是算术运算表达式、SQL或 PL/SQL函数、C调用等。值得注意的是,一般用户要创建函数索引,必须具有GLOBAL QUERY REWRITE和CREATE ANY INDEX权限。否则不能创建函数索引,看下面例子:

 

 

 

例1:为EMP表的ename 列建立大写转换函数的索引idx :

 

 

 

CREATE INDEX idx ON emp ( UPPER(ename));

 

 

 

这样就可以在查询语句来使用:

 

 

 

SELECT * FROM EMP WHERE UPPER(ename) LIKE ‘JOH%’;

 

 

 

例2:为emp 的工资和奖金之和建立索引:
1) 查看emp 的表结构:
SQL> desc emp
 Name Null? Type
 ----------------------------------------- -------- ------------------
 EMPNO NOT NULL NUMBER(4)
 ENAME VARCHAR2(10)
 JOB VARCHAR2(9)
 MGR NUMBER(4)
 HIREDATE DATE
 SAL NUMBER(7,2)
 COMM NUMBER(7,2)
 DEPTNO NUMBER(2)

 

 

 

2)没有授权就创建函数索引的提示:

 

 

 

SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
 2 tablespace users storage(initial 64k next 64k pctincrease 0);
create index sal_comm on emp ( (sal+comm)*12, sal,comm)
                                          *
ERROR at line 1:
ORA-01031: insufficient privileges

 

 

 

3) 连接到DBA帐户并授权:

 

 

 

SQL> connect sys/sys@ora816
Connected.
SQL> grant GLOBAL QUERY REWRITE to scott;

 

 

 

Grant succeeded.

 

 

 

SQL> grant CREATE ANY INDEX to scott;

 

 

 

Grant succeeded.

 

 

 

 

 

4)在连接到scott帐户,创建基于函数的索引:

 

 

 

SQL> connect scott/tiger@ora816
Connected.
SQL> create index sal_comm on emp ( (sal+comm)*12, sal,comm)
 2 tablespace users storage(initial 64k next 64k pctincrease 0);

 

 

 

Index created.

 

 

 

1)在查询中使用函数索引:

 

 

 

SQL> select ename,sal,comm from emp where (sal+comm)*12 >5000;

 

 

 

ENAME SAL COMM
---------------------- ---------------- ----------------
ALLEN 1600 300
WARD 1250 500
MARTIN 1250 1400
TURNER 1500 0
    赵元杰 1234.5 54321

 

 

 

§3.6.2 反向键索引
反向键索引通过反向键保持索引的所有叶子键上的插入分布。有时,可用反向键索引来避免不平衡的索引。对于反向键索引可以进行下面操作:
l 通过在ALTER INDEX命令后加REBUILD NOREVERSE或REBUILD REVERSE子句来使索引边为反向键索引或普通索引;
l 采用范围扫描的查询不能使用反向键索引;
l 位图索引不能反向;
l 索引编排表不能反向。

 

 

 

例1:创建一个反向键索引:
CREATE INDEX i ON t (a,b,c) REVERSE;

 

 

 

例2:使一个索引变为反向键索引:
ALTER INDEX i REBUILD NOREVERSE;

 

 

 

 

 

§3.6.3 索引组织表
与普通的索引不一样,索引组织表(Index_Organized Table)是根据表来存储数据,即将索引和表存储在一起。这样的索引结构表(Index_organized table—IOT)的特点是:对表数据的改变,如插入一新行、删除某行都引起索引的更新。
索引组织表就象带一个或多个列所有的普通表一样,但索引组织表在B-树索引结构的叶节点上存储行数据。通过在索引结构中存储数据,索引组织表减少了总的存储量,此外,索引组织表也改善访问性能。
由于表中的行与B_树索引存放在一起,每个行都没有ROWID,而是用主键来标识。但是Oracle会“猜”这些行的位置并为每个行分配逻辑的ROWID。此外,你可以为这样的表建立第二个索引。

 

 

 

创建索引结构表也是用CREATE TABLE 命令加ORGANIZATION INDEX关键字来实现。但是,这样的表在创建完后,你还必须为该表建立一个主键。

 

 

 

例子:
CREATE TABLE IOT_EXPAMPLE
(
Pk_col1 number(4),
Pk_col2 varchar2(10),
Non_pk_col1 varchar2(40),
Non_pk_col2 date,
CONSTRAINT pk_iot PRIMARY KEY
                 ( pk_col1, pk_col2)
)
ORGANIZATION INDEX
TABLESPACE INDEX
STORAGE( INITIAL 1M NEXT 512K PCTINCREASE 0 );

 

 

 

 

 

 

 

索引组织表有些限制:
l 不能使用唯一约束;
l 必须具有一个主键;
l 不能建立簇;
l 不能包含LONG类型列;
l 不支持分布和复制。
提示:如果建立了索引组织表,则会在DBA_TABLES中的IOT_TYPE和IOT_NAME列上记录有索引组织表的信息。

 

 

 

例1.修改索引结构表 docindex 的索引段的INITRANS参数:

 

 

 

ALTER TABLE docindex INITRANS 4;

 

 

 

例2.下面语句加一个的溢出数据段到索引组织表 docindex中:

 

 

 

ALTER TABLE docindex ADD OVERFLOW;

 

 

 

例3.下面语句为索引组织表 docindex的溢出数据段修改INITRANS参数:

 

 

 

ALTER TABLE docindex OVERFLOW INITRANS 4;

 

 

 

 

 

 

 

============================================================================================================
适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引

 

 

 

oracle的索引分为5种:唯一索引,组合索引,反向键索引,位图索引,基于函数的索引

 

 

 

创建索引的标准语法:

 

 

 

CREATE INDEX 索引名 ON 表名 (列名) 

 

 

 

     TABLESPACE 表空间名; 

 

 

 

创建唯一索引:

 

 

 

CREATE unique INDEX 索引名 ON 表名 (列名) 

 

 

 

     TABLESPACE 表空间名; 

 

 

 

创建组合索引:

 

 

 

CREATE INDEX 索引名 ON 表名 (列名1,列名2) 

 

 

 

     TABLESPACE 表空间名; 

 

 

 

创建反向键索引:

 

 

 

CREATE INDEX 索引名 ON 表名 (列名) reverse

 

 

 

     TABLESPACE 表空间名; 

 

 

 

 

 

 

 

查看文章   
oracle 查看索引类别以及查看索引字段被引用的字段方法2008年01月04日 星期五 13:20查看索引个数和类别

 

 

 

select * from user_indexes where table='表名' ;

 

 

 

查看索引被索引的字段

 

 

 

 

 

SQL>select * from user_ind_columns where index_name=upper('&index_name');

 

 

 

PS:

 

 

 

查看某表的约束条件

 

 

 

 

 

SQL>select constraint_name, constraint_type,search_condition, r_constraint_name 
from user_constraints where table_name = upper('&table_name'); 

 

 

 

SQL>select c.constraint_name,c.constraint_type,cc.column_name 
from user_constraints c,user_cons_columns cc 
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name') 
and c.owner = cc.owner and c.constraint_name = cc.constraint_name 
order by cc.position;

 

 

 

查看视图的名称

 

 

 

 

 

SQL>select view_name from user_views;

分享到:
评论

相关推荐

    ORACLE 各种增删改查

    本文将深入探讨Oracle中的“增删改查”操作,包括表空间、用户管理和表的管理。 一、表空间(Tablespaces) 在Oracle中,表空间是存储数据的逻辑单元,它由一个或多个磁盘上的数据文件组成。表空间管理着数据库对象...

    ssm简单的增删改查(初学者)

    这个压缩包文件的内容可能是为了帮助初学者理解如何在SSM框架下实现数据库的增删改查操作,其中Oracle作为后端数据库。 首先,我们来详细了解一下SSM框架的组成部分: 1. Spring:这是一个全面的轻量级应用框架,...

    dbutils + oracle 增删改查批量插入示例

    总的来说,`dbutils + oracle 增删改查批量插入示例`是一个很好的学习资源,它帮助开发者掌握如何在Java项目中有效地进行数据库操作,尤其是在处理大数据量时,批量插入的优势尤为明显。通过理解和实践这个示例,...

    oracle基本语法-增删改查-新手入门

    ### Oracle基本语法——增删改查 #### 一、Oracle简介与环境搭建 在学习Oracle基本语法之前,首先需要了解Oracle数据库系统的一些基础知识,并确保具备一个可以进行实践操作的环境。 - **Oracle简介**:Oracle是...

    oracle增删改查

    在Oracle数据库中,"增删改查"(CRUD:Create, Read, Update, Delete)是基本的操作,对于任何数据库管理员或开发人员来说,掌握这些技能至关重要。下面我们将深入探讨Oracle中的这些操作以及如何创建新的数据库。 ...

    powerbuilder数据窗口的增删改查

    **PowerBuilder数据窗口的增删改查** PowerBuilder(PB)是一种强大的开发工具,尤其在构建数据库应用程序方面表现卓越。它提供了数据窗口(DataWindow)组件,使得与数据库的交互变得简单直观。在这个主题中,我们...

    delphi对oracle数据库增删改查操作

    本文将深入探讨如何使用Delphi进行Oracle数据库的增、删、改、查(CRUD)操作。 首先,为了连接Oracle数据库,Delphi开发者通常会使用第三方组件如ODAC(Oracle Data Access Components)或DBExpress。ODAC提供了...

    orcale增删改查

    在Oracle中,"增删改查"(CRUD:Create, Read, Update, Delete)是最基本的数据操作,对于任何数据库管理员或开发者来说都是必备技能。以下是关于Oracle数据库增删改查的详细知识点: 1. **创建(Create)** - **...

    SSH增删改查一对多+分页

    综上所述,"SSH增删改查一对多+分页"项目展示了如何综合运用Struts2、Spring和Hibernate框架,结合Oracle数据库,实现一个完整的Web应用,包括数据的增删改查操作、一对多关联关系处理以及前端的分页展示。...

    J2EE连接数据库的增删改查

    在J2EE应用程序开发中,数据访问是...总的来说,J2EE连接Oracle数据库进行增删改查涉及了JDBC、Model2架构、DAO设计模式和数据库操作的多个层面。理解并熟练掌握这些知识,对于开发高效、健壮的企业级应用至关重要。

    JSP的增删改查含代码

    **JSP(JavaServer Pages)技术...以上就是JSP实现对Oracle数据库进行增删改查操作的基本知识,包括JSP的原理、JDBC的使用、Oracle数据库的特点以及具体的操作步骤。理解这些知识点,对于进行Web应用开发是非常重要的。

    pl_sql基本语法例子.rar_SQL2569_oracle_pl/sql_plsql增删改查

    本资料主要涵盖了PL/SQL的基本语法以及数据的增删改查操作和视图的使用。 1. PL/SQL基础语法: PL/SQL由三部分组成:声明部分(Declaration)、执行部分(Execution)和异常处理部分(Exception Handling)。声明...

    oracle数据库中的对表中字段的增删改查

    在Oracle数据库中,对表中字段的增删改查是数据库管理的基础操作,涉及到数据库设计、数据完整性以及日常的数据维护工作。以下将详细介绍这四个基本操作,并结合标签“源码”和“工具”来探讨如何在实践中高效地完成...

    java web实现分页以及数据库增删改查

    这里我们将深入探讨如何实现Java Web中的分页功能,并结合JDBC进行数据库的增删改查操作。 首先,分页查询的核心在于限制查询结果的数量,通常通过设置SQL查询语句的LIMIT或OFFSET子句来实现。在MySQL中,可以使用`...

    oracle 增删改查

    根据提供的文件信息,本文将详细解释Oracle数据库中的增删改查操作,并重点解析与表空间相关的创建、修改及删除等管理操作。 ### Oracle 表空间的创建 在Oracle数据库中,表空间是逻辑存储单元,它由一个或多个...

    学生管理系统实现增删改查功能的

    在本项目中,"学生管理系统实现增删改查功能的"这一标题表明系统的核心功能已经涵盖基本的数据操作,即添加(Add)、删除(Delete)、修改(Modify)和查询(Query)。 对于"查询学生信息是按照姓名查找的"这一描述...

    纯JAVA不用数据库的,用数组对数据增删改查

    这个“纯JAVA不用数据库的,用数组对数据增删改查”的项目就是为此目的设计的。它提供了一个基础的学生管理系统,适合初学者学习数据操作的基本概念。 首先,我们要了解数组在Java中的角色。数组是内存中连续存储...

    Spring+SpringMVC+MyBatis (简单)增删改查

    可能包含Controller、Service、DAO三层架构中的类,以及对应的Mapper XML文件,用于处理用户相关的增删改查操作。 在实际开发中,使用SSM框架进行简单增删改查的过程大致如下: 1. **创建数据库表**:根据业务需求...

    Oracle增删改查常用操作.docx

    在Oracle数据库中,对数据进行增、删、改、查(CRUD)是最基本的操作,这些操作涉及到表的管理和数据的处理。以下是对Oracle数据库中常用CRUD操作的详细说明: 1. **创建表**: 使用`CREATE TABLE`语句来创建新的...

    基于ssh的增删改查数据库是Oracle

    标题中的“基于SSH的增删改查数据库是Oracle”指的是使用Spring、Struts2和Hibernate(SSH)这三大Java开源框架来操作Oracle数据库进行数据的增、删、改、查操作。SSH是一个流行的企业级应用开发框架,常用于构建Web...

Global site tag (gtag.js) - Google Analytics