oracle 索引

文章目录

一.索引

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');

在这里插入图片描述

相关文章

文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符...
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远...
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语...
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseErr...
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Or...
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点...