【oracle11g ,19】索引管理

一.索引的分类:

1.逻辑上分为:

单列索引和复合索引

唯一索引和非唯一索引

函数索引

domain索引

2.物理上分:

分区索引和非分区索引

b-tree

bitmap

注意:表和索引最好不放在同一表空间。

二.domain索引:(了解)

一般的索引 %MI%‘是不走的索引的,但有可能走域索引。

域索引用于文本的检索,适合数据仓库。

SQL> select * from scott.emp where ename  like ‘%MI%‘;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7369 SMITH      CLERK           7902 17-DEC-80        800                    20

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

SQL> select * from scott.emp where ename  like ‘MI%‘;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

三.b-tree和bitmap 索引:

1.b-tree索引是默认的索引。

#创建索引表空间 (uniform size:可以减少碎片)

SQL> create tablespace indx datafile ‘/u01/app/oracle/oradata/PROD/disk4/indx01.dbf‘ size  50m autoextend on next 10m maxsize 500m uniform size 1m;

Tablespace created.

详解:http://www.tuicool.com/articles/q6vqEf

2.位图索引

四.b-tree 和 bitmap的区别:

1.b-tree索引使用场景:

基数比较大(在一个大表上)

建立在重复值比较少的列上 ,在做select查询时,返回记录的行数小于全部记录的4%,

因为索引是有序的,所以可以在排序字段上建立索引。

update 较多。

oltp使用

2.bitmap 索引使用场景:  (在生产环境中不使用)

基数比较小

建立在重复值非常高的列上

在做DML时代价高,所以在update较少的列上建立bitmap索引。

一般使用在altp。

bitmap缺点:当对一个有位图索引的数据表进行dml(包括insert)操作的时候,oracle会由于bitmap index 锁定过多的数据行。

3.案例: 性别列上建立索引

SQL> create table lxtb(id number(8),gender varchar2(2),name varchar2(30));

SQL> declare

2   v_num number(2);

3  begin

4   for i in 1..20000 loop

5     v_num:=round(dbms_random.value(0,1),0);

6     if v_num>0 then

7       insert into lxtb values(i,‘M‘,‘male‘||i);

8     else

9       insert into lxtb values(i,‘F‘,‘female‘||i);

10     end if;

11     if mod(i,1000)=0 then

12      commit;

13     end if;

14   end loop;

15   commit;

16  end;

17  /

PL/SQL procedure successfully completed.

SQL> select count(*) from lxtb;

COUNT(*)

----------

20000

SQL> select * from lxtb where rownum<=10;

ID GE NAME

---------- -- --------------------------------------------------

1 M  male1

2 M  male2

3 M  male3

4 M  male4

5 M  male5

6 F  female6

7 M  male7

8 M  male8

9 F  female9

10 M  male10

10 rows selected.

SQL> col index_name for a20

SQL> col index_type for a10

SQL> select index_name,index_type,table_name,tablespace_name

2  from dba_indexes where table_name=‘LXTB‘;

no rows selected

SQL> col column_name for a10

SQL> select index_name,table_name,column_name from dba_ind_columns where table_name=‘LXTB‘;

no rows selected

#创建b-tree索引 (默认索引)

SQL> create index i_gender on lxtb(gender) tablespace indx;

Index created.

#BLEVEL=1 表示b-tree为两层,LEAF_BLOCKS 表示页块数。

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS

-------------------- ---------- ---------- ---------- ---------- -----------

I_GENDER             NORMAL     LXTB       INDX                1          37

SQL> drop index i_gender;

Index dropped.

#创建位图索引:

SQL> create bitmap index i_gender on lxtb(gender) tablespace indx;

Index created.

SQL> col index_name for a20

SQL> col index_type for a10

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS

-------------------- ---------- ---------- ---------- ---------- -----------

I_GENDER             BITMAP     LXTB       INDX                0           1

五.索引的管理操作:

1.分析索引的命令:收集统计信息

SQL> analyze index i_gender validate structure;

Index analyzed.

SQL> exec DBMS_STATS.GATHER_INDEX_STATS(‘SYS‘,‘I_GENDER‘);

PL/SQL procedure successfully completed.

2.对索引碎片的整理: 一般碎片整理不彻底,要重建索引。

SQL> alter index i_gender coalesce;

Index altered.

3.将索引迁移到其他表空间:

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS

-------------------- ---------- ---------- ---------- ---------- -----------

I_GENDER             NORMAL     LXTB       INDX                1          37

#迁移到其他表空间

SQL> alter index i_gender rebuild tablespace users nologging online;

Index altered.

SQL> col index_type for a10

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS

-------------------- ---------- ---------- ---------- ---------- -----------

I_GENDER             NORMAL     LXTB       USERS               1          37

4.监控索引: 查看查询是否走索引,

SQL> select * from v$object_usage where index_name=‘I_GENDER‘;

no rows selected

#打开监控

SQL> alter index i_gender monitoring usage;

Index altered.

MON:yes表示监控,no:表示未监控

#use= NO表示查询没有走索引,use=yes表示查询走索引。

SQL> select * from v$object_usage where index_name=‘I_GENDER‘;

INDEX_NAME           TABLE_NAME MON USE START_MONITORING    END_MONITORING

-------------------- ---------- --- --- ------------------- -------------------

I_GENDER             LXTB       YES NO  02/10/2014 18:39:27

#关闭监控

SQL> alter index i_gender nomonitoring usage;

Index altered.

SQL> select * from v$object_usage where index_name=‘I_GENDER‘;

INDEX_NAME           TABLE_NAME MON USE START_MONITORING    END_MONITORING

-------------------- ---------- --- --- ------------------- -------------------

I_GENDER             LXTB       NO  YES 02/10/2014 18:39:27 02/10/2014 18:41:43

六.创建和重建索引:(重点)

1.注意:在生成库上重建或创建索引,对索引的一切操作,一定要使用nologging online,

nologging :少计日志,提高效率。

online:不阻塞dml操作

#创建索引

SQL> create index i_gender on lxtb(gender) tablespace indx nologging online;

Index created.

#重建索引

alter index xxx rebuild online;

2.rebuild 和 rebuild online 区别:

七.函数索引:

(略) 详见:【sql,11】视图、序列、索引、同义词、权限和角色的管理

八.反向索引:

在生成库上不建议使用。

#创建反向索引:

SQL> create index i_id on lxtb(id) reverse tablespace indx;

Index created.

SQL> col index_name for a20

SQL> col index_type for a10

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS

-------------------- ---------- ---------- ---------- ---------- -----------

I_NAME               NORMAL     LXTB       INDX                1          60

I_GENDER             NORMAL     LXTB       USERS               1          37

I_UPPER              FUNCTION-B LXTB       INDX                1          60

ASED NORMA

L

I_ID                 NORMAL/REV LXTB       INDX                1          44

八.HASH索引:(一般不使用)

使用hash算法分散值。与反向索引相似,范围查询效率极低。

#创建hash索引

SQL> create index i_id on lxtb hash(id) tablespace indx;

Index created.

九.复合索引:

详见:【sql,11】视图、序列、索引、同义词、权限和角色的管理

十.查询索引:

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks,buffer_pool

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS BUFFER_

-------------------- ---------- ---------- ---------- ---------- ----------- -------

I_NAME               NORMAL     LXTB       INDX                1          60 DEFAULT

I_GENDER             NORMAL     LXTB       USERS               1          37 DEFAULT

I_UPPER              FUNCTION-B LXTB       INDX                1          60 DEFAULT

ASED NORMA

L

I_ID                 NORMAL/REV LXTB       INDX                1          44 DEFAULT

#切换缓存池

SQL> alter index scott.pk_emp storage(buffer_pool keep);

Index altered.

SQL> col index_name for a20

SQL> col index_type for a10

SQL> select index_name,index_type,table_name,tablespace_name,blevel,leaf_blocks,buffer_pool

2  from dba_indexes where table_name=‘LXTB‘;

INDEX_NAME           INDEX_TYPE TABLE_NAME TABLESPACE     BLEVEL LEAF_BLOCKS BUFFER_

-------------------- ---------- ---------- ---------- ---------- ----------- -------

I_NAME               NORMAL     LXTB       INDX                1          60 DEFAULT

I_GENDER             NORMAL     LXTB       USERS               1          37 DEFAULT

I_UPPER              FUNCTION-B LXTB       INDX                1          60 DEFAULT

ASED NORMA

L

I_ID                 NORMAL/REV LXTB       INDX                1          44 DEFAULT

SQL> select object_id,object_name,object_type from dba_objects where owner=‘SCOTT‘;

OBJECT_ID OBJECT_NAME          OBJECT_TYPE

---------- -------------------- --------------------

10184 DEPT                 TABLE

10185 PK_DEPT              INDEX

10186 EMP                  TABLE

10187 PK_EMP               INDEX

10188 BONUS                TABLE

10189 SALGRADE             TABLE

6 rows selected.

SQL> select segment_name,segment_type,tablespace_name,bytes/1024 k,extents,blocks

2  from dba_segments where owner=‘SCOTT‘;

SEGMENT_NA SEGMENT_TY TABLESPACE          K    EXTENTS     BLOCKS

---------- ---------- ---------- ---------- ---------- ----------

DEPT       TABLE      USERS              64          1          8

PK_DEPT    INDEX      USERS              64          1          8

EMP        TABLE      USERS              64          1          8

PK_EMP     INDEX      USERS              64          1          8

BONUS      TABLE      USERS              64          1          8

SALGRADE   TABLE      USERS              64          1          8

SQL> select constraint_name,table_name,column_name

2  from dba_cons_columns where owner=‘SCOTT‘;

CONSTRAINT TABLE_NAME COLUMN_NAM

---------- ---------- ----------

PK_DEPT    DEPT       DEPTNO

PK_EMP     EMP        EMPNO

FK_DEPTNO  EMP        DEPTNO

以下内容参考:http://blog.csdn.net/rlhua/article/details/13776423

十一.设置index 为invisible.

An invisible index is an index that is ignored by the optimizer unless you explicitly set the OPTIMIZER_USE_INVISIBLE_INDEXES initialization parameter to TRUE at the session or system level.

To create an invisible index:

  • Use the CREATE INDEX statement with the INVISIBLE keyword.

    The following statement creates an invisible index named emp_ename for the ename column of the emp table:

    CREATE INDEX emp_ename ON emp(ename)

    TABLESPACE users

    STORAGE (INITIAL 20K

    NEXT 20k) INVISIBLE;

隐藏索引

[email protected]> create index emp_ename_i on emp(ename) invisible;

Index created.

[email protected]> select index_name,VISIBILITY from user_indexes;

INDEX_NAME           VISIBILIT

-------------------- ---------

PK_EMP               VISIBLE

EMP_SAL_F            VISIBLE

EMP_COMM_I           VISIBLE

EMP_ENAME_I          INVISIBLE

PK_DEPT              VISIBLE

[email protected]> select * from emp where ename=‘KING‘;

没有走索引

切换到系统用户,修改参数

[email protected]> alter session set optimizer_use_invisible_indexes=true;

Session altered.

[email protected]> select * from scott.emp where ename=‘KING‘;

隐藏索引变正常索引或反之

[email protected]> alter index scott.emp_ename_i visible;

Index altered.

[email protected]>  select index_name,VISIBILITY from user_indexes;

INDEX_NAME                     VISIBILIT

------------------------------ ---------

PK_EMP                         VISIBLE

EMP_SAL_F                      VISIBLE

EMP_COMM_I                     VISIBLE

EMP_ENAME_I                    VISIBLE

PK_DEPT                        VISIBLE

多个索引,把慢的索引隐藏点,让他走快的索引

[email protected]> alter index emp_ename_i visible;

Index altered.

[email protected]> alter index emp_ename_i invisible;

Index altered.

时间: 2024-12-13 09:09:59

【oracle11g ,19】索引管理的相关文章

Atitit.index&#160;manager&#160;api&#160;design&#160;索引管理api设计

Atitit.index manager api design 索引管理api设计 1. kw1 1.1. 索引类型 unique,normal,fulltxt1 1.2. 聚集索引(clustered index,也称聚类索引1 1.3. 索引方式:btree,hashtable2 1.4. 索引使用所有的页面规模百分比2 2. Ui2 3. api2 3.1. createIndex(indexName,cols)2 3.2. Rebuild2 3.3. Del2 3.4. Up2 4. -

[ElasticSearch]Java API 之 索引管理

ElasticSearch为了便于处理索引管理(Indices administration)请求,提供了 org.elasticsearch.client.IndicesAdminClient接口.通过如下代码从 Client 对象中获得这个接口的实现: IndicesAdminClient indicesAdminClient = client.admin().indices(); IndicesAdminClient定义了好几种prepareXXX()方法作为创建请求的入口点. 1. 索引

mysql内部组件架构,索引管理,视图view

--以下内容摘自马哥教育课堂 === 单进程多线程模型 每个用户连接都使用一个线程 mysql使用线程池来管理各个线程 mysql内部组件架构 connection --management service & unities(管理服务单元,如备份恢复,集群,合并,迁移工具,复制工具): connection pool(认证,线程重用,连接限制,内存检查,缓存): --SQL接口(DML,DDL,存储过程,视图,触发器): 分析器parser(查询翻译成二进制指令,访问权限): 优化器optim

手动刷新magento的索引管理方法

当我们网站商品很多的时候,比如有几千件,我们刷新Magento的索引管理(Index Management)经常会失败.那么后台刷新不了,我们还可以通过命令行来刷新. 使用命令行来刷新索引管理会极大降低系统消耗,容易成功. 我们来看下步骤,如果你在使用linux服务器,登入你的ssh客户端,切换目录到你magento根文件夹中名字是shell的文件中.(切换文件夹的命令:cd)        在此文件夹中输入如下命令        php -f indexer.php -- -reindex c

MongoDB索引管理

虽然MongoDB的索引在存储结构上都是一样的,但是根据不同的应用层需求,还是分成了唯一索引(unique).稀疏索引(sparse).多值索引(multikey)等几种类型. 唯一索引 唯一索引在创建时加上 unique:true 的选项即可,创建命令如下: db.users.ensureIndex({username: 1}, {unique: true}) 上面的唯一索引创建后,如果insert一条username已经存在的数据,则会报如下的错误: E11000 duplicate key

基于lucene的案例开发:实时索引管理类IndexManager

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44015983 http://www.llwjy.com/blogd.php?id=5757ce8c007754704b563dd6a47ca1ca 个人的博客小站也搭建成功,网址:www.llwjy.com/blog.php ,欢迎大家来吐槽~ 在前一篇博客中,对实时索引的实现原理做了一些简单的介绍,这里就介绍下,如何利用Lucene来实现索引的管理(Lucene中已经实现了大

Aerospike C客户端手册———查询—次索引管理

次索引管理 Aerospike C客户端提供在数据库中创建和删除次索引的能力. 目前,次索引可用namespace.set.bin三者名称的组合来创建,可用于创建索引的bin数值类型是整型(integer)或字符串(string).若一个次索引被定义在包含整型数值的.名称为"x"的bin上,那么只有包含bin "x"且bin数值为整型的记录被索引.其它包含bin "x"但数据不是整型的记录不被索引. 索引管理调用被提交到Aerospike集群中的

[Elasticsearch] 索引管理 (一)

索引管理 本文翻译自Elasticsearch官方指南的索引管理(Index Management)一章 我们已经了解了ES是如何在不需要任何复杂的计划和安装就能让我们很容易地开始开发一个新的应用的.但是,用不了多久你就会想要仔细调整索引和搜索过程来更好的适配你的用例. 几乎所有的定制都和索引(Index)以及其中的类型(Type)相关.本章我们就来讨论用于管理索引和类型映射的API,以及最重要的设置. 创建索引 到现在为止,我们已经通过索引一份文档来完成了新索引的创建.这个索引是使用默认的设置

MySQL 索引管理与执行计划

原文:MySQL 索引管理与执行计划 1.1 索引的介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息. 索引的一个主要目的就是加快检索表中数据的方法,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构. 1.1.1 唯一索引 唯一索引是不允许其中任何两行具有相同索引值的索引.当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一

MongoDB索引管理——创建索引,查看索引,删除索引,重建索引

先给users集合插入两条记录,然后用users集合来进行索引管理的演示: > user1={"name":"liming","age":20,"gender":"F"} { "name" : "liming", "age" : 20, "gender" : "F" } > db.users.in