前提引入

数据库连接

参考文章,很详细

表空间

参考文章,很详细

系统表的字段查询

desc user_tables

TABLE_NAME                NOT NULL VARCHAR2(128)  
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(128)
IOT_NAME VARCHAR2(128)
STATUS VARCHAR2(8)
PCT_FREE NUMBER
PCT_USED NUMBER
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
LOGGING VARCHAR2(3)
BACKED_UP VARCHAR2(1)
NUM_ROWS NUMBER
BLOCKS NUMBER
EMPTY_BLOCKS NUMBER
AVG_SPACE NUMBER
CHAIN_CNT NUMBER
AVG_ROW_LEN NUMBER
AVG_SPACE_FREELIST_BLOCKS NUMBER
NUM_FREELIST_BLOCKS NUMBER
DEGREE VARCHAR2(10)
INSTANCES VARCHAR2(10)
CACHE VARCHAR2(5)
TABLE_LOCK VARCHAR2(8)
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
PARTITIONED VARCHAR2(3)
IOT_TYPE VARCHAR2(12)
TEMPORARY VARCHAR2(1)
SECONDARY VARCHAR2(1)
NESTED VARCHAR2(3)
BUFFER_POOL VARCHAR2(7)
FLASH_CACHE VARCHAR2(7)
CELL_FLASH_CACHE VARCHAR2(7)
ROW_MOVEMENT VARCHAR2(8)
GLOBAL_STATS VARCHAR2(3)
USER_STATS VARCHAR2(3)
DURATION VARCHAR2(15)
SKIP_CORRUPT VARCHAR2(8)
MONITORING VARCHAR2(3)
CLUSTER_OWNER VARCHAR2(128)
DEPENDENCIES VARCHAR2(8)
COMPRESSION VARCHAR2(8)
COMPRESS_FOR VARCHAR2(30)
DROPPED VARCHAR2(3)
READ_ONLY VARCHAR2(3)
SEGMENT_CREATED VARCHAR2(3)
RESULT_CACHE VARCHAR2(7)
CLUSTERING VARCHAR2(3)
ACTIVITY_TRACKING VARCHAR2(23)
DML_TIMESTAMP VARCHAR2(25)
HAS_IDENTITY VARCHAR2(3)
CONTAINER_DATA VARCHAR2(3)
INMEMORY VARCHAR2(8)
INMEMORY_PRIORITY VARCHAR2(8)
INMEMORY_DISTRIBUTE VARCHAR2(15)
INMEMORY_COMPRESSION VARCHAR2(17)
INMEMORY_DUPLICATE VARCHAR2(13)
DEFAULT_COLLATION VARCHAR2(100)
DUPLICATED VARCHAR2(1)
SHARDED VARCHAR2(1)
EXTERNAL VARCHAR2(3)
CELLMEMORY VARCHAR2(24)
CONTAINERS_DEFAULT VARCHAR2(3)
CONTAINER_MAP VARCHAR2(3)
EXTENDED_DATA_LINK VARCHAR2(3)
EXTENDED_DATA_LINK_MAP VARCHAR2(3)
INMEMORY_SERVICE VARCHAR2(12)
INMEMORY_SERVICE_NAME VARCHAR2(1000)
CONTAINER_MAP_OBJECT VARCHAR2(3)
MEMOPTIMIZE_READ VARCHAR2(8)
MEMOPTIMIZE_WRITE VARCHAR2(8)
HAS_SENSITIVE_COLUMN VARCHAR2(3) sql

select * * from user_tables where lower(table_name) = '用户的表名';

注意:表在该表中表名等统一以大写存储,查询时注意大小写。

索引

简介

  1. 说明
  • 索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。

  • 索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率

  • 索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;

  • 索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响

  • 索引对用户是透明的,无论表上是否有索引,sql语句的用法不变

  • oracle创建主键时会自动在该列上创建索引

  • 若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值按照升序排列,然后构建索引条目(name和rowid),存储到索引段中,查询name为wish时即可直接查找对应地方

  • 创建了索引并不一定就会使用,oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引。

  • 创建索引时,Oracle会自动在用户的表空间或者指定的表空间创建一个索引段,为索引数据提供表空间。

  1. 缺点
  • 索引占用表空间 ,创建太多索引可能造成索引冗余
  • 索引影响insert、update、delete语句的性能
  1. 优点
  • 索引是一种快速访问数据的途径,可提高数据库性能。
  1. 使用索引的基本原则:

1、装载数据后再建立索引。
2、 频繁搜索的列可以作为索引。
3、 在联接属性上建立索引(主外键),提高多表连接性能。
4、 经常排序分组的列。
5、 删除不经常使用的索引。
6、指定索引块的参数,如果将来会在表上执行大量的insert操作,建立索引时设定较大的ptcfree。 (pctfree表示索引空间的预留部分,供之后的操作预留索引空间)
7、指定索引所在的表空间,将表和索引放在不同的表空间上可以提高性能。
8、当在大表上创建索引时候,使用nologging选项可以最小化重做记录吗,使用nologging选项可以节省重做日志空间,降低缩影建立时间、提高索引并行建立时间。

  1. 不要在下面的列创建索引:

1、仅包含几个不同值得列。
2、表中仅包含几条记录。

博主原文

分类

逻辑分类:单列索引组合索引唯一索引、非唯一索引,函数索引。
物理分类:区分索引、非分区索引、B树索引、正向索引、反向索引,位图索引

使用


CREATE [UNIQUE] | [BITMAP] INDEX index_name --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2 --bitmap,创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1] --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING] --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE]
[NOSORT]; --表示创建索引时不进行排序,默认不使用,如果数据已经是按照该索引顺序排列的可以使用



unique:指定索引列中值必须是唯一的
  index_name:索引名
  table_name:指定要建立索引的表
  col_name:要建立索引的列,可以是多列,那样的索引叫组合(复合)索引
  table_space_name:索引存储的表空间

分类

位图索引

create bitmap index emp_index2 on emp(sex);

函数索引

函数索引:常规的B树索引,存放的数据时由表中的数据应用函数后所得的数据,而不是直接存放表中的数据本身。

create index emp_index on emp(upper(job)) ;
触发索引条件 : 当查询中条件中包含相同的函数。
select * from emp where upper(job)= ‘MANAGER’;触发
select * from emp where job = ‘MANAGER’; 不会触发 而且也不会查询导数据

注意函数索引需要的权限: query rewrite系统权限。

位图索引使用时机

修改索引

  1. 分配和释放表空间

alter index index_name
allocate extent(size 1m);

  1. 释放多于的索引空间

alter index index_name
deallocate unused;

  1. 重建索引

alter index index_name rebuild;

  1. 联机重建索引
    当使用rebuild,若其他的用户正在执行dml操作,重建会失败,使用如下:

alter index index_name rebuild online;

  1. 合并索引

alter index index_name coalese;

  1. 重命名索引

alter index index_name rename to index_name2;

删除索引

drop index index_name;

查看索引

利用数据字典视图USER_INDEXES、USER_IND_COLUMNS查看索引信息。

desc user_indexes; user_ind_columns

名称                      空值?      类型             
----------------------- -------- --------------
INDEX_NAME NOT NULL VARCHAR2(128)
INDEX_TYPE VARCHAR2(27)
TABLE_OWNER NOT NULL VARCHAR2(128)
TABLE_NAME NOT NULL VARCHAR2(128)
TABLE_TYPE VARCHAR2(11)
UNIQUENESS VARCHAR2(9)
COMPRESSION VARCHAR2(13)
PREFIX_LENGTH NUMBER
TABLESPACE_NAME VARCHAR2(30)
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
PCT_THRESHOLD NUMBER
INCLUDE_COLUMN NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
PCT_FREE NUMBER
LOGGING VARCHAR2(3)
BLEVEL NUMBER
LEAF_BLOCKS NUMBER
DISTINCT_KEYS NUMBER
AVG_LEAF_BLOCKS_PER_KEY NUMBER
AVG_DATA_BLOCKS_PER_KEY NUMBER
CLUSTERING_FACTOR NUMBER
STATUS VARCHAR2(8)
NUM_ROWS NUMBER
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
DEGREE VARCHAR2(40)
INSTANCES VARCHAR2(40)
PARTITIONED VARCHAR2(3)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
BUFFER_POOL VARCHAR2(7)
FLASH_CACHE VARCHAR2(7)
CELL_FLASH_CACHE VARCHAR2(7)
USER_STATS VARCHAR2(3)
DURATION VARCHAR2(15)
PCT_DIRECT_ACCESS NUMBER
ITYP_OWNER VARCHAR2(128)
ITYP_NAME VARCHAR2(128)
PARAMETERS VARCHAR2(1000)
GLOBAL_STATS VARCHAR2(3)
DOMIDX_STATUS VARCHAR2(12)
DOMIDX_OPSTATUS VARCHAR2(6)
FUNCIDX_STATUS VARCHAR2(8)
JOIN_INDEX VARCHAR2(3)
IOT_REDUNDANT_PKEY_ELIM VARCHAR2(3)
DROPPED VARCHAR2(3)
VISIBILITY VARCHAR2(9)
DOMIDX_MANAGEMENT VARCHAR2(14)
SEGMENT_CREATED VARCHAR2(3)
ORPHANED_ENTRIES VARCHAR2(3)
INDEXING VARCHAR2(7)


名称 空值? 类型
------------------ --- --------------
INDEX_NAME VARCHAR2(128)
TABLE_NAME VARCHAR2(128)
COLUMN_NAME VARCHAR2(4000)
COLUMN_POSITION NUMBER
COLUMN_LENGTH NUMBER
CHAR_LENGTH NUMBER
DESCEND VARCHAR2(4)
COLLATED_COLUMN_ID NUMBER

select * from user_indexes where lower(table_name )= ‘class’;