能否描述一下索引的原理,最好能介绍索引表的结构
上一篇 / 下一篇 2009-01-07 22:46:46 / 个人分类:Oracle
- 文件版本: V1.0
- 开发商: 本站原创
- 文件来源: 本地
- 界面语言: 简体中文
- 授权方式: 免费
- 运行平台: Win9X/Win2000/WinXP
关于Oracle索引 51Testing软件测试网HX
zT7m wu
如何为你的表的主键、唯一性约束所创建的索引定义自己的表空间和别的参数? 51Testing软件测试网!FH Lj|{*fx
51Testing软件测试网A^0l#p/sQc.La _2\2I
Oracle里边,如果你在一张表上面加上了唯一性约束或者主键约束,Oracle会自动为那个表创建索引来保证这些约束的。 51Testing软件测试网N8ge|Rr#})}(c2s
比如下面的语句: 51Testing软件测试网5U1v;ey n:ou9}D}
SQL> CREATE TABLE TEST 51Testing软件测试网,Sjsse*YGs$[
2 (NAME VARCHAR2 (20) PRIMARY KEY, 51Testing软件测试网m0XA'xc*ZP0~E
3 AGE NUMBER);
'X%Vv Ag'x&k0 51Testing软件测试网5Zyj4PK1E{.\
表已创建。 51Testing软件测试网7W/WQ.\&t0T5f1_3op/eh
可以用下面的语句看到,Oracle自动创建了一个叫做SYS_C004006 的索引: 51Testing软件测试网J ^*S*BZ9x[S1J:O
SQL> SELECT INDEX_NAME, TABLE_NAME, tablespace_name from USER_INDEXES WHERE TABLE_NAME='TEST'; 51Testing软件测试网 Y$k2VT [q sc7G
51Testing软件测试网+cu6~"P_ V5i!kI
INDEX_NAME TABLE_NAME TABLESPACE_NAME 51Testing软件测试网1G&JP0@\ J
----------------- -------------------- ----------------------
Tu*C"G*ZPfK0 SYS_C004006 TEST TOOLS
Bzt*D}0 51Testing软件测试网'k#|)en:l.ybF
这个时候,再看看DBA_SEGMENT,可以看到,这一切都是用了这个表空间的默认存储参数:
.OR#_8o+Ha1x1C0 SQL>SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE,
8[DY4ovur_0 EXTENTS, INITIAL_EXTENT, NEXT_EXTENT, MAX_EXTENTS, PCT_INCREASE 51Testing软件测试网&mj2S.p9Yj,r
FROM DBA_SEGMENTS WHERE SEGMENT_NAME='SYS_C004006'; 51Testing软件测试网 p~PK1h(_
51Testing软件测试网*NA:iPP4k'kF
OWNER SEGMENT_NAME SEGMENT_TY EXTENTS INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE 51Testing软件测试网c(_{!M&en:\6B7?
-------- ------------- ---------- ---------- -------------- ----------- ----------- ------------ 51Testing软件测试网X8}x$`w m
CHAOS SYS_C004006 INDEX 1 10240 10240 121 50 51Testing软件测试网|x/G8o)M"n1[
51Testing软件测试网5g KI"u1|c]
对于大多数索引来说,这些存储参数并不合适,不利于系统的性能和维护。 51Testing软件测试网"uZa:I0zk#M
能不能对于这些索引像普通索引那样定义自己的表空间、存储参数呢?
;Mdh1hMII+` K,B%Z0 答案是肯定的,我们可以做到,这就要用到Oracle的创建表或者改变表语句中的一个USING INDEX子句。 51Testing软件测试网7FOkP{
下面让我们来仔细分析这个子句的用法:
O`9fHn%@H:W?0 51Testing软件测试网H/p/B.@w*?
从这个图里我们可以看到,我们可以为这个索引指定很多具体的参数,而不必都服从Oracle的分配:我们可以指定INITRANS,MAXTRANS,TABLESPACE,LOGGING/NOLOGGING,以及具体的存储参数比如: INITIAL,NEXT,MINEXTENTS,MAXEXTNETS,PCTINCREASE等等。 51Testing软件测试网+Fo"o4C4b"C&[~
例子: 51Testing软件测试网nG ].Q-NX#G
SQL> CREATE TABLE TEST
:yw'q S.~4O1pn0 2 (NAME VARCHAR2(30) PRIMARY KEY
FI;d$A'wm0 3 USING INDEX 51Testing软件测试网!n/q5XS&?)Fp
4 TABLESPACE INDEXS
如何为你的表的主键、唯一性约束所创建的索引定义自己的表空间和别的参数? 51Testing软件测试网!FH Lj|{*fx
51Testing软件测试网A^0l#p/sQc.La _2\2I
Oracle里边,如果你在一张表上面加上了唯一性约束或者主键约束,Oracle会自动为那个表创建索引来保证这些约束的。 51Testing软件测试网N8ge|Rr#})}(c2s
比如下面的语句: 51Testing软件测试网5U1v;ey n:ou9}D}
SQL> CREATE TABLE TEST 51Testing软件测试网,Sjsse*YGs$[
2 (NAME VARCHAR2 (20) PRIMARY KEY, 51Testing软件测试网m0XA'xc*ZP0~E
3 AGE NUMBER);
'X%Vv Ag'x&k0 51Testing软件测试网5Zyj4PK1E{.\
表已创建。 51Testing软件测试网7W/WQ.\&t0T5f1_3op/eh
可以用下面的语句看到,Oracle自动创建了一个叫做SYS_C004006 的索引: 51Testing软件测试网J ^*S*BZ9x[S1J:O
SQL> SELECT INDEX_NAME, TABLE_NAME, tablespace_name from USER_INDEXES WHERE TABLE_NAME='TEST'; 51Testing软件测试网 Y$k2VT [q sc7G
51Testing软件测试网+cu6~"P_ V5i!kI
INDEX_NAME TABLE_NAME TABLESPACE_NAME 51Testing软件测试网1G&JP0@\ J
----------------- -------------------- ----------------------
Tu*C"G*ZPfK0 SYS_C004006 TEST TOOLS
Bzt*D}0 51Testing软件测试网'k#|)en:l.ybF
这个时候,再看看DBA_SEGMENT,可以看到,这一切都是用了这个表空间的默认存储参数:
.OR#_8o+Ha1x1C0 SQL>SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE,
8[DY4ovur_0 EXTENTS, INITIAL_EXTENT, NEXT_EXTENT, MAX_EXTENTS, PCT_INCREASE 51Testing软件测试网&mj2S.p9Yj,r
FROM DBA_SEGMENTS WHERE SEGMENT_NAME='SYS_C004006'; 51Testing软件测试网 p~PK1h(_
51Testing软件测试网*NA:iPP4k'kF
OWNER SEGMENT_NAME SEGMENT_TY EXTENTS INITIAL_EXTENT NEXT_EXTENT MAX_EXTENTS PCT_INCREASE 51Testing软件测试网c(_{!M&en:\6B7?
-------- ------------- ---------- ---------- -------------- ----------- ----------- ------------ 51Testing软件测试网X8}x$`w m
CHAOS SYS_C004006 INDEX 1 10240 10240 121 50 51Testing软件测试网|x/G8o)M"n1[
51Testing软件测试网5g KI"u1|c]
对于大多数索引来说,这些存储参数并不合适,不利于系统的性能和维护。 51Testing软件测试网"uZa:I0zk#M
能不能对于这些索引像普通索引那样定义自己的表空间、存储参数呢?
;Mdh1hMII+` K,B%Z0 答案是肯定的,我们可以做到,这就要用到Oracle的创建表或者改变表语句中的一个USING INDEX子句。 51Testing软件测试网7FOkP{
下面让我们来仔细分析这个子句的用法:
O`9fHn%@H:W?0 51Testing软件测试网H/p/B.@w*?
从这个图里我们可以看到,我们可以为这个索引指定很多具体的参数,而不必都服从Oracle的分配:我们可以指定INITRANS,MAXTRANS,TABLESPACE,LOGGING/NOLOGGING,以及具体的存储参数比如: INITIAL,NEXT,MINEXTENTS,MAXEXTNETS,PCTINCREASE等等。 51Testing软件测试网+Fo"o4C4b"C&[~
例子: 51Testing软件测试网nG ].Q-NX#G
SQL> CREATE TABLE TEST
:yw'q S.~4O1pn0 2 (NAME VARCHAR2(30) PRIMARY KEY
FI;d$A'wm0 3 USING INDEX 51Testing软件测试网!n/q5XS&?)Fp
4 TABLESPACE INDEXS