一.索引的分类:
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.


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


十一.设置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;


隐藏索引

scott@TESTDB> create index emp_ename_i on emp(ename) invisible;
 
Index created.
 
 
scott@TESTDB> 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
 
scott@TESTDB> select * from emp where ename='KING';
 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmxodWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" style="border:0px none; max-width:100%">

 
没有走索引
 
切换到系统用户,改动參数
sys@TESTDB> alter session set optimizer_use_invisible_indexes=true;
 
Session altered.
sys@TESTDB> select * from scott.emp where ename='KING';
 
 
 
隐藏索引变正常索引或反之
sys@TESTDB> alter index scott.emp_ename_i visible;
 
Index altered.
 
scott@TESTDB>  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
 
 
多个索引,把慢的索引隐藏点,让他走快的索引
 
 
scott@TESTDB> alter index emp_ename_i visible;
 
Index altered.
 
scott@TESTDB> alter index emp_ename_i invisible;
 
Index altered.









posted @ 2017-08-10 14:41 llguanli 阅读(...) 评论(...) 编辑 收藏

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

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

    当我们网站商品很多的时候,比如有几千件,我们刷新Magento的索引管理(Index Management)经常会失败.那么后台刷新不了,我们还可以通过命令行来刷新. 使用命令行来刷新索引管理会极大降 ...

  2. 转载 SQL Server中索引管理之六大铁律

    转载原地址 http://jingyan.baidu.com/article/48a42057c03bd7a924250429.html 索引是以表列为基础的数据库对象.索引中保存着表中排序的索引列, ...

  3. MySQL 索引管理与执行计划

    1.1 索引的介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息. ...

  4. MySQL索引管理

    一.索引介绍 1.什么是索引 1.索引好比一本书的目录,它能让你更快的找到自己想要的内容. 2.让获取的数据更有目的性,从而提高数据库索引数据的性能. 2.索引类型介绍 1.BTREE:B+树索引 2 ...

  5. ElasticSearch权威指南学习(索引管理)

    创建索引 当我们需要确保索引被创建在适当数量的分片上,在索引数据之前设置好分析器和类型映射. 手动创建索引,在请求中加入所有设置和类型映射,如下所示: PUT /my_index { "se ...

  6. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  7. MySQL学习【第七篇索引管理及执行计划】

    一.索引介绍 1.什么是索引? 索引由如字典,目的就是为了更快寻找到要找的内容. 令搜索查询的数据更有目的性,从而提高数据检索的能力 2.索引类型介绍 1.BTREE: B+树索引 2.HASH: H ...

  8. mongodb数据库索引管理

    1:ensureIndex() 方法 MongoDB使用 ensureIndex() 方法来创建索引. 语法 ensureIndex()方法基本语法格式如下所示: }) 语法中 Key 值为你要创建的 ...

  9. Atitit.index manager api design 索引管理api设计

    Atitit.index manager api design 索引管理api设计 1. kw 1 1.1. 索引类型 unique,normal,fulltxt 1 1.2. 聚集索引(cluste ...

  10. Atitit.index manager api design 索引管理api设计

    Atitit.index manager api design 索引管理api设计 1. kw1 1.1. 索引类型 unique,normal,fulltxt1 1.2. 聚集索引(clustere ...

随机推荐

  1. Vue路由query传参

    1.不要进行过深的嵌套 let id = 'uyu' this.$router.push({ path: '/mrp_detail', query: { re_order_id: id, option ...

  2. Unity实现发送QQ邮件功能

    闲来无聊,用Unity简单实现了一个发送邮件的功能,希望与大家互相交流互相进步,大神勿喷,测试的是QQ邮件用到的是MailMessage类和SmtpClient类首先如果发送方使用的是个人QQ邮箱账号 ...

  3. UVa 11015 - 05-2 Rendezvous

    題目:有一個班級的學生要一起寫作業,所以他們要到一個統一的地點.現在給你他們各自的位置, 問集合地點定在哪,能够讓全部人走的總路徑長度最小. 分析:圖論.最短路.直接利用Floyd計算最短路,找到和值 ...

  4. 109.vprintf vfprintf vscanf vfscanf

    vprintf //输出到屏幕 int POUT(char *str, ...) { va_list arg_p=NULL; //读取 va_start(arg_p, str); //接受可变参数 i ...

  5. openGLES(三)

    着色器语言 ​ 着色器语言基于c/c++语言,但是还是有区别的,它不是面向对象 数据类型概述 ​ 内建的数据类型:浮点型(float).布尔型(bool).整形(int),矩阵(matrix)以及向量 ...

  6. 学习笔记:_lodash.js常用函数

    _lodash.js 文档:https://www.lodashjs.com/docs/4.17.5.html _.compact(array) 创建一个移除了所有假值的数组 什么是假值?false, ...

  7. debian 9 安装后需做的几件事

    debian 9 安装后需做的几件事 安装环境:X86 >> Debian 9 Linux/GNU apt源更新 注意连上有线网络 刚安装好的debian系统中,/etc/apt/sour ...

  8. [D3] Animate Transitions in D3 v4

    D3 makes it easy to add meaningful animations to your data visualizations. Whether it’s fading in ne ...

  9. android studio 一次编译错误:Error:Minimum supported Gradle version is 2.14.1.

    因为需要,今天从git上重新下载工程到另一个目录下,结果运行的时候报了这个错:Error:Minimum supported Gradle version is 2.14.1.  Current ve ...

  10. jni和C++通信中文乱码的问题

    转自 http://www.cnblogs.com/bluesky4485/archive/2011/12/13/2285802.html 首先,需要明确几个关于编码的基本概念: java内部是使用的 ...