Oracle

索引创建及管理

1.

Oracle

索引简介

Oracle

数据库中,存储的每一行数据都有一个

rowID

来标识。当

Oracle

中存储着大量的数据时,意味着有大量的

rowID

,此时想要快速定位指定的

rowID

,就需要使用索引对象。

当对

Oracle

表执行指定条件的查询时,常规的方法是将所有的记录取出来,然后再把每一条记录与查询条件作对比,最后返回满足条件的记录。这样操作不仅耗费时间并耗费资源。当有了索引之后,只需要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的

rowID

快速找到表中对应的记录。

用户可以根据情况不同创建多种类型的索引。按照索引的存储方式将索引分为

B

树索引、位图索引、反向索引和基于函数的索引。创建索引时需要注意以下几点:

l

索引应该建立在

where

子句频繁引用、排序以及分组的列上,如果选择的列不合适将无法提升查询速度;

l

限制索引的个数。索引只要提升查询速度,但会降低

DML

操作的速度;

l

指定索引块空间的使用参数。基于表建立索引时,

Oracle

会将相应表添加到索引块。为索引添加数据时,

Oracle

会按照

pctfree

参数在索引块上预留部分空间。如果将来在表上执行大量的

insert

操作,那么应该在建立索引时设置较大的

pctfree

l

将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间,可以提高访问性能(

Oracle

能够并行读取不同硬盘的数据);

2.

创建索引

在创建索引时,

Oracle

首先对将要简历索引的字段进行排序,然后将排序后的字段值和对应记录的

rowID

存储在索引段中。查询时,根据索引查询指定条件的

rowID

,再根据

rowID

提取数据行。

1)

B

树索引

B

树索引时

Oracle

最常用的索引类型(也是默认类型),是以

B

树结构组织并存放索引数据。默认情况下

B

树索引中的数据是以升序方式排列的。

B

树索引是由根块、分支块和叶块组成。

例:为

emp

表的

deptno

列创建索引

index

_

test

Create

index

index

_

test

on

emp

(

deptno

)

Pctfree

25

Tablespace

users

;

其中,子句

pctfree

指定为将来

insert

操作所预留的空闲空间,子句

tablespace

指定索引段所在的表空间

2) 位图索引

当需创建索引列包含的取值太少时,如对性别列创建索引,取值只能是“男”或者“女”,使用

B

树索引取出来的值任然太多,失去了索引的意义。这种情况需要使用位数索引,

例:

Create

bitmap

index

index

_

test

On

emp

(

salary

)

Tablespace

users

;

注:初始化参数

create

_

bitmap

_

area

_

size

用于指定建立位图索引时分配的位图区大小,默认值为8

MB

,该参数越大建立位图索引的速度越快。修改该参数语句为:

Alter

system

set

create

_

bitmap

_

area

_

size

=8388608

Scope

=

spfile

修改后需要重新启动数据库方可生效;

3) 反向键索引

在单调递增的列上使用

B

树索引时,若用户对表中数据做了删除操作,将导致对某一边的叶子节点的大量占用。

Oracle

提供另一种索引机制,及反向键索引,它可以将添加的数据随机分散到索引中。反向键索引是一种特殊的

B

树索引,在顺序递增数列上建立索引非常有用。反向键索引在原理和存储结构方面和

B

树索引类似。当用户插入记录时,将列值进行反向操作后进行索引,此时数据不在是递增的,所以新数据在值的范围上分布通常比原来的有序树更均匀。

例:

Create

index

index

_

test

On

emp

(

deptno

)

reverse

Tablespace

users

;

如果该列上已经建立了

B

树索引,那么可以将其修改为反向键索引:

Alter

index

index

_

test

Rebulid

reverse

;’

4) 基于函数的索引

用户在使用数据库时,最常遇到的问题是大小写字符敏感。例如在

emp

表中

Job

字段有

MANAGER

的记录,当用户使用小写搜索时则无法找到该记录,只能通过函数

upper

对应进行转换,在使用转换后的数据进行检查。但是这样查询是,即便

job

列有普通索引,

Oracle

也会执行全表搜索,并为遇到的各个行计算

upper

函数。这种情况可以使用建立基于函数的索引,通常只是常规

B

树索引,但是它存放的数据是由表中数据应用函数后得到的,而不是直接存放表中的数据本身。

如果习惯使用小写字符串,可以创建如下索引:

Create

index

index

_

test

On

emp

(

lower

(

job

));

3.

修改索引

修改索引使用

alter

index

完成。

为表建立索引后,随着对表不断进行更替、插入和删除动作,索引中国会产生越来越多的存储碎片,导致索引工作效率降低。这是可以采取重建索引和合并索引清除碎片。合并索引只是将

B

树中叶子节点的存储碎片合并在一起,并不会改变索引的物流组织结构。

合并索引:

Alter

index

index

_

test

Coalesce

deallocate

unused

;

重建索引:

Alter

index

index

_

test

rebuild

Tablespace

user

1;

重建索引时可以更改索引的类型,存储表空间等

4.

删除索引

删除索引使用

drop

index

语句。当索引过于碎片化,或者不经常被用到时,既可以删除索引:

Drop

index

index

_

test

注:删除表是也会删除其相应的索引。

5.

显示索引信息

为了显示索引的信息,

Oracle

提供了一系列数据字典视图,使用户了解索引的各方面信息。

1) 显示表的所有索引:显示

emp

的所有索引

Select

*

from

dba

_

indexs

where

owner

=’

EMP

2) 显示索引列:显示

index

_

test

所使用的索引列:

Select

*

from

user

_

ind

_

columns

where

index

_

name

=’

INDEX

_

TEST

3) 显示索引位置及大小

Select

*

from

user

_

segments

where

segment

_

name

=’

INDEX

_

TEST

4) 显示函数索引

Select

*

from

user

_

ind

_

expressions

where

index

_

name

=’

INDEX

_

TEST

oracle加索引 oracle,Oracle索引创建及管理相关推荐

  1. Oracle系列之七:表的创建与管理

    Oracle表的创建与管理 1. 表的创建 2. 表的修改 3. 表中数据的增删改查 4. 表的Merge 5. 表的删除 6. 表的重命名 7. 表的索引 8. 表的约束 9. dual表 表是Or ...

  2. oracle 加查询锁,oracle 锁查询 select加锁方法

    --一.oracle对select加锁方法 create table t_test(a number,b number); INSERT INTO t_test VALUES (1, 2); INSE ...

  3. oracle数据库、数据表的创建与管理 实验笔记二

    如何在命令窗口复制粘贴 鼠标移动到窗口边框然后右击 正文: 1.启动SQL*Plus,以SYS身份连接默认数据库. 2.创建一个用户默认表空间H1,并为该用户授相应的权限. 4.以新建用户身份连接默认 ...

  4. oracle 加索引 %3e=,impdp create index parallel-数据泵并行创建索引

    题记:在数据泵导入时默认情况下创建索引是不使用并行的,所以这一步会消耗较长的时间,除了人工写脚本并行创建索引外,数据泵在导入时也可以并行创建索引,本文详细介绍了整个测试过程并得出测试结论. 测试环境为 ...

  5. oracle 主键能加索引吗,Oracle 添加主键和索引

    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率: 一.创建表的同时创建主键约束 (1)无命名 create table studen ...

  6. oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建

    Oracle 创建索引,oracle索引怎么创建 索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索 时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到 真实的数据内 ...

  7. oracle索引大小暴增_Oracle创建索引前估算索引大小(dbms_space.create_index_cost)

    Oracle 创建索引前估算索引大小,在一个表的某个字段创建索引前估算其大小,最好的办法就是在测试库创建索引做预测.如果没有测试 Oracle 创建索引前估算索引大小 在一个表的某个字段创建索引前估算 ...

  8. oracle自动分区如何创建本地索引吗,创建与管理Oracle分区表和本地索引的实例解析...

    创建与管理Oracle分区表和本地索引的相关知识是本文我们主要要介绍的内容,我们知道,Oracle的分区技术在某些条件下可以极大的提高查询的性能,所以被广泛采用.从产品上说,分区技术是Oracle企业 ...

  9. oracle 查询索引个数,Oracle数据库索引的创建和查询

    索引命名规范:普通索引最好i_开头,唯一索引最好u_开头,primary key索引最好pk_开头 1.创建索引:create index 索引名 on 表名(字段名); 2.查询索引 oracle中 ...

  10. Oracle索引详解(索引的原理,创建索引,删除索引,修改索引等)

    Oracle索引详解 一.索引概述 Oracle作为关系型数据库,用户查找数据与行的物理位置无关,表中的每一行均用一个ROWID来标识,当Oracle数据库中存储海量的记录时,就意味着有大量的ROWI ...

最新文章

  1. Python+selenium 自动化-通过窗口名切换窗口,如何获取当前窗口的title窗口名
  2. 信号与系统实验:用Matlab表示常用连续时间信号
  3. 数据结构-树3-红黑树
  4. 什么是微型计算机的组成原理,1微型计算机基本组成原理.ppt
  5. Zabbix4.2-Proxy超时的问题(first network error, wait for 15 seconds)
  6. android日历便签,安卓手机上有日历与便签结合的app吗?
  7. python selenium框架搭建_python + selenium 自动化框架搭建
  8. Reportlab生成图文并茂的pdf报告
  9. dagger2简单使用与理解笔记
  10. egg.js+vue前后端分离项目,后端如何使用set-Cookie为前端设置cookie
  11. 微信小程序 实现路线规划
  12. Excel 图表制作 甘特图 (Excel图表学习:三)
  13. 大淘客的index.php,index.php · zenozhengs/大淘客CMS底部菜单修改版 - Gitee.com
  14. android设置输入数字英文,android 安卓editext默认弹出英文输入法,只能输入英文与数字(示例代码)...
  15. 【python与数据分析】实验八——图像批量添加数字水印及实现模拟转盘抽奖游戏
  16. ES6的Array.from方法创建长度为N的undefined数组
  17. 2022年全国职业院校技能大赛(高职组)
  18. 三星 S6 屏幕快照
  19. jar包本地能启动但不能在服务器上启动
  20. BZOJ 3036 绿豆蛙的归宿

热门文章

  1. 将强化学习应用到量化投资中实战篇(学习模块开发上)
  2. 自学Python:批量转换WORD文档为PDF
  3. 【Tools】OBS Studio录制视频教程
  4. C语言中16进制转字符串字符串转16进制
  5. TVP-VAR:时变参数向量自回归模型
  6. python自动修改论文格式_如何轻轻松松修改论文格式?
  7. 利用python自动解析摩斯电码音频文件
  8. faster RCNN之RPN详解
  9. 用 Python 硬核从头实现一个神经网络
  10. C++ opencv人脸识别框