作者:无为2502863873 | 来源:互联网 | 2014-07-08 01:11
Oracle索引的新认识首先,Oracle的索引有。www.2cto.com普通索引B*树,BitMap索引,函数索引,组合索引,反转索引。那么这里主要说一下常用的索引。B*树索引就是普通索引。使用方式如下:Sql代码createindex...SyntaxHighlighter
Oracle索引的新认识
首先,Oracle的索引有。www.2cto.com
普通索引B*树,BitMap索引,函数索引,组合索引,反转索引。
那么这里主要说一下常用的索引。
B*树索引就是普通索引。
使用方式如下:
Sql代码
create index idx_a on my_table(a);
B*树的组合索引用法如下:
Sql代码
create index idx_a_b on my_table(a,b);
组合索引是普通索引的一种扩充。
每次查询,CBO会选择其中的一条索引进行查询。
所以即使建立了多个单列索引,也只是会选择一条进行使用。
注意,组合索引的前后顺序会有很大的差异。
按照上面的组合索引来说,如果是这种情况:
Sql代码
select * from my_table
where a = *
是可以走 idx_a_b这个索引的。
但是,相对,如果是:
Sql代码
select * from my_table
where b= *
则不会走idx_a_b这个索引了。
所以在使用组合索引的时候,一定要注意前后的顺序。
索引也是占用表空间的,至于占了多少,是可以查的到的。
Sql代码
--(1)查看索引段中extent的数量:
select segment_name, count(*)
from dba_extents
where segment_type = 'INDEX'
and owner = UPPER('&owner') --schema 名
group by segment_name
--(2)查看索引段中的block的数量:
select segment_name, sum(blocks)
from dba_extents
where segment_name = 'SYS_C005736' --对象名
group by segment_name;
Oracle为
数据库中的所有数据分配逻辑结构空间。
数据库空间的单位是数据块(block)、范围(extent)和段(segment)。
Oracle数据块(block)是Oracle使用和分配的最小存储单位。
它是由数据库建立时设置的DB_BLOCK_SIZE决定的。一旦数据库生成了,数据块的大小不能改变。
要想改变只能重新建立数据库。(在Oracle9i中有一些不同,不过这不在本文讨论的范围内。)
Extent是由一组连续的block组成的。
一个或多个extent组成一个segment。
当一个segment中的所有空间被用完时,Oracle为它分配一个新的extent。
Segment是由一个或多个extent组成的。它包含某表空间中特定逻辑存储结构的所有数据。
一个段中的extent可以是不连续的,甚至可以在不同的数据文件中。
一个object只能对应于一个逻辑存储的segment,
我们通过查看该segment中的extent,可以看出相应object的存储情况。
面对一些海量数据表,选择适合的索引可以降低存储大小,降低成本,也能够提高查询效率。