C/C++教程

oracle 索引

本文主要是介绍oracle 索引,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 一.索引
      • 1.1 索引 概念
      • 1.2 索引分类

一.索引

1.1 索引 概念

索引是与表相关的可选结构,用于提高sql语句执行性能,减少磁盘IO;
索引在逻辑上和物理上都独立于表的数据;
使用create index语句创建索引;
oracle自动维护索引;

1.2 索引分类

索引分为:B树索引、位图索引
B树索引分为:唯一索引、组合索引、反向键索引、基于函数的索引

在这里插入图片描述
B树索引是一个二叉树,通过根节点块、分支节点块确定叶子节点块,最后叶子节点块包含索引列和指向表中每个匹配行的rowid值。

创建标准索引:

create index emp_ind_1 on emp(last_name);

查看表中的索引:

select * from user_indexes ui where ui.TABLE_NAME='EMP';

在这里插入图片描述

查看索引信信息:

select * from user_ind_columns uic where uic.INDEX_NAME='EMP_IND_1';

在这里插入图片描述

分析索引:

当一个table经常进行DML操作时,它的索引会存在许多block空间的浪费,这是因为index block中的记录只有在全部表示为不可用时, block 才能被加入到freelist中去被重新利用,若存在索引碎片,表查询变慢。
通过 analyze index <index名> validate structure分析索引的数据块是否有坏块
然后查看index_stats表中的pct_used列的值,如果pct_used的值过低,说明在索引中存在碎片,需要重建索引

测试:

create table student (sname varchar2(8));

begin
    for i in 1..13000000 loop
        insert into student values (ltrim(to_char(i,'00000009')));
        if mod(i,100)=0 then
            commit;
        end if;
        end loop;
end;
analyze index STU_IND validate  structure ;
select s.NAME,s.PCT_USED from INDEX_STATS s where s.NAME='STU_IND';

在这里插入图片描述

pct_used一般为90%, 默认会保留10%的空闲。

delete student where ROWNUM<3000000;

重建索引:

alter index <索引名> rebuild

唯一索引:

唯一索引确保在定义索引的列中没有重复值;
oracle自动在表的主键上创建唯一索引;

create table  stu1 (sid number,sname varchar2(20),sage number,male varchar2(2));
create unique index s1_index on stu1(SID);

唯一索引可重复插入空值,不违反唯一约束

insert into stu1 values (null,'mk',20,'1');

在这里插入图片描述

这篇关于oracle 索引的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!