详谈 oracle 索引 (笔记)

摘要:
createuniqueindex_table3_sidontable3local;选择*fromtable3_sid,其中sid=10000;--看看它的解释方案,我们可以看到5。压缩索引压缩索引是B树索引的变体,它更适合createindexindex,一个在启动列中具有重复值的列_ nameontable_ namecompressN;其中N是压缩的前几项。例如,N=2压缩列1和列2的索引。

1、oracle索引空值问题

  当在有空值得列上建立单列索引时,如果搜索条件为 is null 在解释计划中可以看到,对于此列oracle并没有使用索引查询;

  但是当建立的是多列索引是,就会按照索引来进行查询。

2、B-树索引

  示意图:

  详谈 oracle 索引 (笔记)第1张

在B-树索引中,将会按照从上到下的顺序进行索引。如果列的选择度不低的话,索引扫描就会很慢。原因就在于要遍历很多的叶子快来取出不同的行编号。

随着出入数据的增多,最右侧的叶子块也在一直的增大,可能会导致缓冲区的繁忙等待。这种类型的最右侧索引的快速增长被称为 右侧增长索引 。后面将谈到一些解决方法。

3、位图索引

  位图索引不适合用于需要大量DML操作的表(DML指除select以外的SQL语句)。适合用于大多数数据具有较少的唯一的列进行的只读运算的数据仓库表。

  位图索引要注意的一点是。更新一个具有位图索引的列,必须要更新位图索引。

4、分区索引

  4.1、局部索引

    局部索引使用LOCAL关键字来建立。

    create index index_name on table_name (column_name) local;

    当用到分区索引的时候,会直接查找匹配分区的内容,而不是查询每个分区。

  4.2、全局索引

    全局索引用GLOBAL来创建

  4.3、散列分区

    回归到B-数索引中所说到的右侧增长索引问题,就可以用散列分区的方式来进行分区。

    与范围分区的方式不同散列分区是把所有的数据均匀的分布在不同的分区内。具体方法如下:

    

--范围分区
create table table2
partition by range(year)
(partition p_2012 values less than (2013),
partition p_2013 values less than (2014),
partition p_2014 values less than (2015),
partition p_max values less than (maxvalue)
)
as
select * from table1;

--散列分区
drop sequence sf;
create sequence sf cache 200;
drop table table3;

create table table3
partition by hash(sid)
partitions 32
as
select sf.nextval sid,t.* from table1 t;

--通过以下代码可以查到
select dbms_rowid.rowid_object(rowid) obj_id,count(*) from table3
group by dbms_rowid.rowid_object(rowid);

    OBJ_ID   COUNT(*)
---------- ----------
     86232       4717
     86236       4571
     86240       4696
     86257       4633
     86234       4547
     86235       4580
     86241       4717
     86249       4589
     86250       4612
     86251       4623
     86261       4742
     86238       4578
……

create unique index index_table3_sid on table3(sid) local;

select * from table3_sid where sid =10000;
--查看其解释计划,可以得到

  详谈 oracle 索引 (笔记)第2张

5、压缩索引

  压缩索引是B-树索引的一个变体,更适合于引导列中具有重复值的列

  create index index_name on table_name(column1,column2,column3) compress N;

  其中N为压缩前几项。例如N=2就是压缩column1,column2这两项索引。

  压缩索引适用于引导列具有较少唯一值的索引。

6、基于函数的索引

  create create index index_name on table_name(function_name(column1));

  在select是必须加上function_name(column1)才能使用索引,只用column1的话,还是全表扫描。

7、反转键索引

  也是一种解决右侧增长索引问题的一种方法,但是因为索引是反转的所以不能使用范围运算符

  create index index_name on table_name (column_name) global reverse;

  不常用,因为会引起其他的一些负面影响

免责声明:文章转载自《详谈 oracle 索引 (笔记)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在不使用密码的情况下切换(su)到另一个用户帐户vim进入粘贴模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# ManagedDataAccess 操作oracle数据库

C# ManagedDataAccess 操作oracle数据库 甲骨文官方制作的oracle类库优点是无需安装oracle客户端 环境准备 Nuget安装 Oracle.ManagedDataAccess 引用 using Oracle.ManagedDataAccess.Client; 连接oracle数据库 连接字符串 connStr = @"Da...

Faiss流程与原理分析

 1、Faiss简介   Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,支持十亿级别向量的搜索,是目前最为成熟的近似近邻搜索库。它包含多种搜索任意大小向量集(备注:向量集大小由RAM内存决定)的算法,以及用于算法评估和参数调整的支持代码。Faiss用C++编写,并提供与Numpy完美衔接的Pytho...

Oracle之物化视图

来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于这方面的资料,便于提高,整理内容如下: 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限...

1.Oracle10g安装

1.1 下载安装包 我们可以到ORACLE的官方网站去下载它的安装压缩包,不过得详细看相关的软件声明,废话少说,以下就是Oracle10g的链接地址和站点截图http://www.oracle.com/technology/global/cn/software/products/database/oracle10g/index.html     1.2.安...

oracle分组并在组内排序

根据c1,c2分组,并且根据c3排序,取第一行select tt.*from (select row_number() over(partition by c1, c2 order by c3 desc) r,t.*from test_table t) ttwhere tt.r = 1...

美团点评面试20190515

1. 自我介绍 2. 项目介绍,项目难点 3. 笔试题研究过吗? 4. Mybatis多参数传递    //方法1:顺序(索引)传参法 public User selectUser(String name, int deptId); <select resultMap="UserResultMap"> select * fro...