存储参数storage子句含义及设置技巧

存储参数storage子句含义及设置技巧,第1张

系统环境 *** 作系统 Windows 数据库  Oracle i R ( ) for NT 企业版 安装路径 C:\ORACLE解释 可用于 表空间 回滚段 表 索引 分区 快照 快照日志参数名称 缺省值 最小值 最大值 说明 INITIAL (数据块) (数据块) *** 作系统限定 分配给Segment的第一个Extent的大小 以字节为单位 这个参数不能在alter语句中改变 如果指定的值小于最小值 则按最小值创建 NEXT (数据块) (数据块) *** 作系统限定 第二个Extent的大小等于NEXT的初值 以后的NEXT值=前一NEXT大小乘以( +PCTINCREASE/ ) 如果指定的值小于最小值 则按最小值创建 如果在alter语句中改变NEXT的值 则下一个分配的Extent将具有指定的大小 而不管上一次分配的Extent大小和PCTINCREASE参数值 MINEXTENTS (Extent)回滚段为 个Extent (Extent)回滚段为 个Extent *** 作系统限定 Segment第一次创建时分配的Extent数量 MAXEXTENTS 根据数据块大小而定 (Extent)回滚段为 个Extent 无限制 随着Segment中数据量的增长 最多可分配的Extent数量 PCTINCREASE %(Oracle 中为 %) % *** 作系统限定 指定第三个及其后的Extent相对于上一个Extent所增加的百分比 如果PCTINCREASE为 则Segment中所有新增加的Extent的大小都相同 等于NEXT的值 如果PCTINCREASE大于 则每次计算NEXT的值(用上面的公式) PCTINCREASE不能为负数 创建回滚段时 不可指定此参数 回滚段中此参数固定为 OPTIMAL 不能小于回滚段初始分配空间 *** 作系统限定 仅与回滚段有关 当回滚段因为增长 扩展而超过此参数的设定范围时 Oracle系统会根据情况动态地重新分配Extents 试图收回多分配的Extent FREELISTS 数据块大小限制 只能在CREATE TABLE CLUSTER INDEX中指定FREELISTS和FREELIST GROUPS参数 模式对象中每一个自由列表组中自由列表的数量 FREELIST GROUPS 取决于Oracle并行实例的数量 用户创建的数据库对象的自由列表组的数量 只有用OPS并行服务器选项时才使用这一参数 一个实例对应一个组 BUFFER_POOL 给模式对象定义缺省缓冲池(高速缓存) 该对象的所有块都存储在指定的高速缓存中 对于表空间或回滚段无效 建议PCTINCREASE参数设置为 可使碎片最小化 使每一个Extent都相同(等于NEXT值)一旦建立了某个对象 它的INITIAL和MINEXTENTS参数不能修改(Oracle 中可修改MINEXTENTS参数)对于NEXT和PCTINCREASE的任何修改都只影响后来分配的那些Extent在分配一个新Extent时 系统直接按NEXT的值分配一个Extent 然后用公式 前一NEXT值*( +PCTINCREASE/ ) 计算出下一个应该分配的Extent的大小 并把计算结果保存到相关数据字典的NEXT_EXTENT列上 做为下一个应该分配的Extent的大小 CREATE TABLE test(a number)STORAGE(INITIAL K NEXT K MINEXTENTS MAXEXTENTS PCTINCREASE )解释 初始给test表分配两个Extent 第一个Extent是 K 因INITIAL= K第二个Extent是 K 因NEXT= K如果因表内数据增长 需要分配第三个Extent 因PCTINCREASE是 则第三个Extent是 K= K+ K第四个Extent是 K= K+ K可通过数据字典表DBA_TABLES ALL_TABLES USER_TABLES查看参数设置情况 如 select table_name initial_extent next_extent min_extents max_extents pct_increase from user_tablesTABLE_NAME INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE TEST lishixinzhi/Article/program/Oracle/201311/16635

数据库索引的种类:

1、按照索引列值的唯一性,索引可分为唯一索引和非唯一索引

非唯一索引:B树索引

create index 索引名 on 表名(列名) tablespace 表空间名

唯一索引:建立主键或者唯一约束时会自动在对应的列上建立唯一索引

2、索引列的个数:单列索引和复合索引

3、按照索引列的物理组织方式

B树索引

create index 索引名 on 表名(列名) tablespace 表空间名

位图索引

create bitmap index 索引名 on 表名(列名) tablespace 表空间名

反向键索引

create index 索引名 on 表名(列名) reverse tablespace 表空间名

函数索引

create index 索引名 on 表名(函数名(列名)) tablespace 表空间名

删除索引

drop index 索引名

重建索引

alter index 索引名 rebuild

索引的创建格式: 

CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> 

    ON <schema>.<table_name> 

    (<column_name>| <expression>ASC | DESC, 

     <column_name>| <expression>ASC | DESC,...) 

    TABLESPACE <tablespace_name> 

    STORAGE <storage_settings> 

    LOGGING | NOLOGGING 

    COMPUTE STATISTICS 

    NOCOMPRESS | COMPRESS<nn> 

    NOSORT | REVERSE 

    PARTITION | GLOBAL PARTITION<partition_setting>

UNIQUE | BITMAP:指定UNIQUE为唯一值索引,BITMAP为位图索引,省略为B-Tree索引。 

    <column_name>| <expression>ASC | DESC:可以对多列进行联合索引,当为expression时即“基于函数的索引” 

    TABLESPACE:指定存放索引的表空间(索引和原表不在一个表空间时效率更高) 

    STORAGE:可进一步设置表空间的存储参数 

    LOGGING | NOLOGGING:是否对索引产生重做日志(对大表尽量使用NOLOGGING来减少占用空间并提高效率) 

    COMPUTE STATISTICS:创建新索引时收集统计信息 

    NOCOMPRESS | COMPRESS<nn>:是否使用“键压缩”(使用键压缩可以删除一个键列中出现的重复值) 

    NOSORT | REVERSE:NOSORT表示与表中相同的顺序创建索引,REVERSE表示相反顺序存储索引值 

    PARTITION | NOPARTITION:可以在分区表和未分区表上对创建的索引进行分区

使用USER_IND_COLUMNS查询某个TABLE中的相应字段索引建立情况

使用DBA_INDEXES/USER_INDEXES查询所有索引的具体设置情况。

在Oracle中的索引可以分为:B树索引、位图索引、反向键索引、基于函数的索引、簇索引、全局索引、局部索引等,下面逐一讲解:

一、B树索引:

最常用的索引,各叶子节点中包括的数据有索引列的值和数据表中对应行的ROWID,简单的说,在B树索引中,是通过在索引中保存排过续的索引列值与相对应记录的ROWID来实现快速查询的目的。其逻辑结构如图:

  可以保证无论用户要搜索哪个分支的叶子结点,都需要经过相同的索引层次,即都需要相同的I/O次数。

B树索引的创建示例:

create index ind_t on t1(id) 

注1:索引的针对字段创建的,相同字段不能创建一个以上的索引;

注2:默认的索引是不唯一的,但是也可以加上unique,表示该索引的字段上没有重复值(定义unique约束时会自动创建);

注3:创建主键时,默认在主键上创建了B树索引,因此不能再在主键上创建索引。

二、位图索引:

有些字段中使用B树索引的效率仍然不高,例如性别的字段中,只有“男、女”两个值,则即便使用了B树索引,在进行检索时也将返回接近一半的记录。

所以当字段的基数很低时,需要使用位图索引。(“低”的标准是取值数量 <行数*1%)

位图索引的逻辑结构如上图所示:索引中不再记录rowid和键值,而是将每个值作为一列,用0和1表示该行是否等于该键值(0表示否1表示是)。其中位图索引的行顺序与原表的行顺序一致,可以在查询数据的过程中对应计算出行的原始物理位置。

位图索引的创建示例:

create bitmap index ind_t on t1(type)

注:位图索引不可能是唯一索引,也不能进行键值压缩。

三、反向键索引:

考虑这个情况:某一字段的值是1-1000顺序排列,建立B树索引后依旧递增,到后来该B数索引不断在后面增加分支,会形成如下如的不对称树:

  反向键索引是一种特殊的B树索引,在存储构造中与B树索引完全相同,但是针对数值时,反向键索引会先反向每个键值的字节,然后对反向后的新数据进行索引。例如输入2008则转换为8002,这样当数值一次增加时,其反向键在大小中的分布仍然是比较平均的。

反向键索引的创建示例:

create index ind_t on t1(id) reverse

注:键的反转由系统自行完成。对于用户是透明的。

四、基于函数的索引:

有的时候,需要进行如下查询:select * from t1 where to_char(date,'yyyy')>'2007'

但是即便在date字段上建立了索引,还是不得不进行全表扫描。在这种情况下,可以使用基于函数的索引。其创建语法如下:

create index ind_t on t1(to_char(date,'yyyy'))

注:简单来说,基于函数的索引,就是将查询要用到的表达式作为索引项。

五、全局索引和局部索引:

这个索引貌似很复杂,其实很简单。总得来说一句话,就是无论怎么分区,都是为了方便管理。

具体索引和表的关系有三种:

1、局部分区索引:分区索引和分区表1对1

2、全局分区索引:分区索引和分区表N对N

3、全局非分区索引:非分区索引和分区表1对N

创建示例:

首先创建一个分区表

create table student

(

stuno number(5),

sname vrvhar2(10),

deptno number(5)

)

partition by hash (deptno)

(

partition part_01 tablespace A1,

partition part_02 tablespace A2

)

创建局部分区索引(1v1):

create index ind_t on student(stuno)

local(

partition part_01 tablespace A2,

partition part_02 tablespace A1

) --local后面可以不加

创建全局分区索引(NvN):

create index ind_t on student(stuno)

global partition by range(stuno)

(

partition p1 values less than(1000) tablespace A1,

partition p2 values less than(maxvalue) tablespace A2

) --只可以进行range分区

创建全局非分区索引(1vN)

create index ind_t on student(stuno) GLOBAL

organization

index

--指定表为iot表

index--索引名

tablespace--表空间名

storage--存储参数:

1、initial

---分配给segment的第一个extent的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建

2、next

---第二个extent的大小等于next的初值,以后的next值=前一next大小乘以(1+pctincrease/100),如果指定的值小于最小值,则按最小值创建。如果在alter语句中改变next的值,则下一个分配的extent将具有指定的大小,而不管上一次分配的extent大小和pctincrease参数值

3、pctincrease----指定第三个及其后的extent相对于上一个extent所增加的百分比,如果

pctincrease为0,则segment中所有新增加的extent的大小都相同,等于next的值,如果pctincrease大于0,则每次计算next的值(用上面的公式),pctincrease不能为负数。创建回滚段时,不可指定此参数,回滚段中此参数固定为0

你找一下oracle数据库的教程看看·


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11964192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存