您好,欢迎来到划驼旅游。
搜索
您的当前位置:首页Oracle 创建索引

Oracle 创建索引

来源:划驼旅游


Oracle创建索引

Oracle在创建索引时要遵循以下的原则:

 平衡查询和DML的需要。在易挥发(DML操作频繁)的表上尽量减少索引的数量,因为索引虽然加快了查询的速度,但却降低了DML操作速度。

 将其放入单独的表空间,不要与表、临时段或还原(回滚)段放在一个表空间,因为索引段会与这些段竞争输入/输出(I/O)。

 使用统一的EXTENT尺寸:数据块尺寸的5倍,或表空间的MINIMUM EXTENT的尺寸。这样做的目的是为了减少系统的转换时间。

 对大索引可以考虑使用NOLOGGING。这样做的目的是通过减少REDO操作来提高系统的效率,但是如果一旦系统发生崩溃,则该索引一般是无法进行完全灰度的。不过问题也不是很大,因为真正的数据还在表中,所以可以通过重建该索引来恢复与之前完全相同的效果。

 索引的INITRANS参数通常应该比相对应表的高。以为索引项要比表中的数据行小的多,所以一个数据块可以存放更多的索引项(记录)。

创建索引的命令格式:

CREATE (UNIQUE|BITMAP) INDEX [用户名.]索引名

ON [用户名.]表名

(列名 [ASC | DESC] [,列名 [ASC| DESC ] ]…)

[TABLESPACE 表空间名]

[PCTFREE 正整型数]

[INITRANS 正整型数]

[MAXTRANS 正整型数]

[存储子句]

[LOGGING | NOLOGGING]

[NOSORT]

其中,

 UNIQUE:说明该索引是唯一索引,默认是非唯一的

 ASC:说明所创建的索引为升序

 DESC:说明所创建的索引为降序

 表空间名:说明将要创建的索引的表空间名

 PCTFREE:在创建索引时每一个块中预留的空间

 INITRANS:在每一个块中预分配的事物记录数,默认值为2

 MAXTRANS:在每一个块中可以分配的事物记录数的上限,默认为255

 存储子句:说明在索引中EXTENTS怎样分配

 LOGGING:说明在创建索引是和以后的索引操作中要记录联机重做日志文件(默认)

 NOLOGGING:说明索引的创建和一些数据装入操作将不记录联机重做日志文件

 NOSORT:数据库中所存的数据行已经按升序排好,因此在创建索引时不需要再排序了

 PCTUSED:在索引中不能说明该参数。因为索引记录必须以正确的顺序存放,所以用户不能控制何时向索引块中插入索引数据行

使用数据字典的dba_indexes获取有关scott用户的索引基于表、所在的表空间、索引的类型和索引的状态等信息。

SQL> select index_name,table_name,tablespace_name,index_type,

uniqueness,status from dba_indexes

where owner = 'SCOTT' AND INDEX_NAME not like 'SYS%'

INDEX_NAME TABLE_NAME TABLESPACE_NAME INDEX_TYPE UNIQUENES STATUS

-------------------- ---------- --------------- ---------- --------- ------

PK_DEPT DEPT USERS NORMAL UNIQUE VALID

PK_EMP EMP USERS NORMAL UNIQUE VALID

使用数据字典dba_ind_columns获得scott用户的索引所基于表和列的等信息。

SQL>select index_name,table_name,column_name,index_owner,table_owner

2 from dba_ind_columns

3* where table_owner = 'SCOTT' and index_name not like 'SYS%'

INDEX_NAME TABLE_NAME COLUMN_NAME INDEX_OWNER TABLE_OWNER

-------------------- ---------- --------------- ------------ -----------

PK_EMP EMP EMPNO SCOTT SCOTT

PK_DEPT DEPT DEPTNO SCOTT SCOTT

创建索引:

SQL> CREATE INDEX scott.emp_ename_idx

2 ON scott.emp(ename)

3 PCTFREE 20

4 STORAGE(INITIAL 100K NEXT 100K

5 PCTINCREASE 0 MAXEXTENTS 100)

6* TABLESPACE PIONEER_INDEX

索引已创建。

SQL> CREATE BITMAP INDEX scott.emp_job_idx

2 ON scott.emp(job)

3 PCTFREE 20

4 STORAGE(INITIAL 100K NEXT 100K

5 PCTINCREASE 0 MAXEXTENTS 100)

6 TABLESPACE PIONEER_INDEX;

查看所创建的索引的存储参数是不是按着命令设置的:

SQL> select index_name,pct_free,pct_increase,initial_extent,next_extent

2 from dba_indexes

3 where owner = 'SCOTT' AND INDEX_NAME not like 'SYS%';

INDEX_NAME PCT_FREE PCT_INCREASE INITIAL_EXTENT NEXT_EXTENT

-------------------- ---------- ------------ -------------- -----------

PK_DEPT 10 65536

PK_EMP 10 65536

EMP_ENAME_IDX 20 0 1096 1048576

EMP_JOB_IDX 20 0 1096 1048576

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务