Oracle-关于索引的一些操作

阅读 8

2024-03-05

网络上,对于索引有很多总结:

索引是一种数据库对象;

索引就像是书本的目录,可以实现快速检索查找目标数据;

提高SQL语句的查询性能;

减少磁盘I/O;

在逻辑上和物理上独立于表数据;

索引的类型包括唯一索引、位图索引、组合索引、基于函数的索引、反向索引、B树索引。。。。等。

B树索引,是默认的索引类型,除非有特殊需求,否则正常的B树索引即可。

唯一索引,B树索引的另一种形式,用于强制列值的唯一。通常与主键、唯一约束一块使用,但也可独立。

。。。等等的,就这么多吧。

但是,怎么用,在下面小总一下下。

1.先说说索引相关的视图

user_indexes/all_indexes/dba_indexes ...谁能用这三个货?当然是谁权力大,谁用的多了。我是DBA所以,我谁都能使唤。

一般来说,就查查 dba_indexes ,看看它里面都有啥。比如,我这样查:

select * from dba_indexes where owner = 'baoyw' and table_name = 'TABLE_NAME';

all_ind_columns 这个是表的索引有哪些零件?!这些零件包括,你的索引是创建在哪些字段上的,有几个字段,字段的顺序是什么。。。然后,对比你的执行计划,看看它有没有走这个索引。

select * from all_ind_columns where index_name = 'IDX_BAOYW_ID' ;

那如果你想看看,索引是怎么个创建的,可以这么做:

select dbms_metadata.get_ddl('INDEX','IDX_BAOYW_ID','BAOYW');

--好吧,全面的长这样,是不是很复杂,但语法就是这样
create index "baoyw"."idx_baoyw_name" on "baoyw"."baoyw240305"("name")
 pctfree 10 initrans 2 maxtrans 255 compute statistics
 storage(initial 65536 next 1048576 minextents 1 maxextents 2147483645
 pctincrease 0 freelists 1 freelist groups 1
 buffer_pool default flash_cache default cell_flash_cache default)
 tablespace "baoyw";

这里查看到的创建语句是全面的,你自个对比就知道了。因为我们通常的创建语句写的很简单。

create index baoyw.idx_baoyw_name on baoyw.baoyw("name");

2.再来说说索引的创建

创建其实很简单,一条语句足矣。但问题是,你要在哪个基础哪个需求上,创建。也就是说,哪里需要,你就要让它在哪里出现。

假如,你查询表 baoyw 时,要搜索某个 name 的数据,你要怎么做?

--这样吗?你能找到你想要的 name 吗?海底捞啊!你以为在吃火锅。
select * from baoyw;

--加个条件 name 是不是一眼万年的感觉
select * from baoy where name = 'XXX';

单列索引

--假如,baoyw 这张表,有几十亿上百亿条数据呢,你怎么找?给它整个目录呗!
create index baoyw.idx_baoyw_name on baoyw.baoyw("name");

--再查询,嘎嘎快
select * from baoyw where name = 'XXX';

复合索引(组合索引)

--假如,你要更精确的,多条件的在 几十亿上百亿条数据的表 baoyw 中查询一条或几条数据呢
select * from baoyw where id = 'xzx' and name = 'XXX';

--那就一起来吧
create index baoyw.idx_baoyw_id_name on baoyw.baoyw("id","name");

唯一索引

--假如,baoyw 这张表,name 字段上的值都是唯一的,不重复的,就可以创建唯一索引
create unique index baoyw.idx_baoyw_name on baoyw.baoyw("name");

3.删除一个索引

drop index baoyw.idx_baoyw_id_name;

4.重建索引

重建索引一般要业务非繁忙阶段操作;重建索引后,记得收集统计信息。

alter index baoyw.idx_baoyw_id_name rebuild;

在实际的生产实践中,要结合实际情况操作。所以,需要考虑的方面,不只是索引,有表的大小、相关约束、业务繁忙程度等。

精彩评论(0)

0 0 举报