2013年4月27日 星期六

10:46

1、索引(Index)的功能:对记录进行排序,加快表的查询速度

 2、索引的分类

 1)B-tree 索引(默认)

a、在一个大表上

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

c、如果这一列经常用来做where子句和排序,也可以用来建立索引

d、一般用于OLTP

 2) bitmap index

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

b、 在做DML 操作时,代价值比较高

c、一般用于OLAP 或DSS

—— B-tree 索引不能使用or连接的语句,bitmap index可以使用

3建立索引:默认建立  B-tree index

4建立索引表空间

SYS @ prod >create tablespace indexes datafile  '/u01/app/oracle/oradata/prod/index01.dbf' size 50m autoextend on next 10m maxsize 50m  extent management local uniform size 128k;

Tablespace created.

SQL> select file_id,file_name,tablespace_name from dba_data_files;

FILE_ID FILE_NAME                                          TABLESPACE_NAME

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

1 /u01/app/oracle/oradata/prod/system01.dbf          SYSTEM

2 /u01/app/oracle/oradata/prod/lx01.dbf              LX01

3 /u01/app/oracle/oradata/prod/sysaux01.dbf          SYSAUX

4 /u01/app/oracle/oradata/prod/users01.dbf           USERS

7 /u01/app/oracle/oradata/prod/undotbs02.dbf         UNDOTBS2

12 /u01/app/oracle/oradata/prod/index01.dbf           INDEXES

SQL> create table test (id int,name varchar2(10),sex varchar2(4));

Table created.

SQL> begin

      for i in 1..10000 loop

        insert into test values(i,'user||i,'M');

      end loop;

    end;

    /

SQL>   begin

     for i in 10001..20000 loop

        insert into test values(i,'user||i,'F');

      end loop;

   end;

SQL> select count(*) from test;

COUNT(*)

----------

20000

——建立b-tree 索引

SQL> create index test_sex_idx on test(sex) tablespace indexes;

 

Index created.

——分析索引结构

SQL> analyze index test_sex_idx validate structure;

Index analyzed.

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

from user_indexes   where index_name='TEST_SEX_IDX';

INDEX_NAME      INDEX_TYPE  TABLESPACE_NAME  BLEVEL LEAF_BLOCKS NUM_ROWS

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

TEST_SEX_IDX    NORMAL       INDEXES           1          37      20000

                             

【——BLEVEL  索引的深度(高度 =深度+1)

     ——LEAF_BLOCKS,使用的索引块】

SQL> select index_name,table_name,column_name from user_ind_columns

   where index_name='TEST_SEX_IDX';

INDEX_NAME      TABLE_NAME      COLUMN_NAME

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

TEST_SEX_IDX    TEST            SEX

SQL> select /*+ index (test TEST_SEX_IXD)*/ name,sex from test where sex='F';

10000 rows selected.

Execution Plan

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

Plan hash value: 1357081020

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

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT  |      | 10000 |    97K|    15   (0)| 00:00:01 |

|*  1 |  TABLE ACCESS FULL| TEST | 10000 |    97K|    15   (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

1 - filter("SEX"='F')

Statistics

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

0  recursive calls

0  db block gets

0  consistent gets

0  physical reads

0  redo size

0  bytes sent via SQL*Net to client

0  bytes received via SQL*Net from client

0  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10000  rows processed

SQL> drop index test_sex_idx;

Index dropped.

——建立位图索引

SQL> create bitmap index test_sex_bitind on test(sex) tablespace indexes;

 

Index created.

——分析索引结构

SQL> analyze index test_sex_bitind validate structure;

Index analyzed.

SQL> select index_name,index_type,tablespace_name,blevel,leaf_blocks,num_rows from user_indexes    where index_name='TEST_SEX_BITIND';

INDEX_NAME      INDEX_TYPE      TABLESPACE_NAME   BLEVEL  LEAF_BLOCKS   NUM_ROWS

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

TEST_SEX_BITIND  BITMAP           INDEXES            0           1          2

——在重复值高的列上适合建立bitmap的索引

SQL> select index_name,table_name,column_name from user_ind_columns

   where index_name='TEST_SEX_BITIND';

INDEX_NAME      TABLE_NAME      COLUMN_NAME

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

TEST_SEX_BITIND TEST            SEX

SQL> select /*+ index (test TEST_SEX_BITIND)*/ name,sex from test where sex='F';

10000 rows selected.

Execution Plan

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

Plan hash value: 2624764158

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

| Id  | Operation                    | Name            | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT             |                 | 10000 |    97K|    85   (0)| 00:00:02 |

|   1 |  TABLE ACCESS BY INDEX ROWID | TEST            | 10000 |    97K|    85   (0)| 00:00:02 |

|   2 |   BITMAP CONVERSION TO ROWIDS|                 |       |       |            |          |

|*  3 |    BITMAP INDEX SINGLE VALUE | TEST_SEX_BITIND |       |       |            |          |

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

Predicate Information (identified by operation id):

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

3 - access("SEX"='F')

Statistics

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

0  recursive calls

0  db block gets

0  consistent gets

0  physical reads

0  redo size

0  bytes sent via SQL*Net to client

0  bytes received via SQL*Net from client

0  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

10000  rows processed

SQL> drop index TEST_SEX_BITIND;   

Index dropped.

5、基于函数的索引

SQL> conn scott/tiger

Connected.

SQL> set autotrace on;

SQL> create index emp_ename_ind on emp(ename) tablespace indexes;

Index created.

SQL> select * from emp where ename='SCOTT';

EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO

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

7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20

Execution Plan

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

Plan hash value: 3220259315

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

| Id  | Operation                   | Name          | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT            |               |     1 |    87 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP           |     1 |    87 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | EMP_ENAME_IND |     1 |       |     1   (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

2 - access("ENAME"='SCOTT')

Note

-----

- dynamic sampling used for this statement

Statistics

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

0  recursive calls

0  db block gets

0  consistent gets

0  physical reads

0  redo size

0  bytes sent via SQL*Net to client

0  bytes received via SQL*Net from client

0  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

——通过函数访问,索引无效

SQL> select * from emp where lower(ename)='scott';

EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO

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

7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20

Execution Plan

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

Plan hash value: 3956160932

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

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT  |      |     1 |    87 |    15   (0)| 00:00:01 |

|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    87 |    15   (0)| 00:00:01 |  ——索引无效

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

Predicate Information (identified by operation id):

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

1 - filter(LOWER("ENAME")='scott')

Note

-----

- dynamic sampling used for this statement

Statistics

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

0  recursive calls

0  db block gets

0  consistent gets

0  physical reads

0  redo size

0  bytes sent via SQL*Net to client

0  bytes received via SQL*Net from client

0  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

——建立函数索引

SQL> create index emp_ename_funind on emp(lower(ename)) tablespace indexes;

Index created.

SQL> select * from emp where lower(ename)='scott';

EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO

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

7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20

Execution Plan

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

Plan hash value: 519807088

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

| Id  | Operation                   | Name             | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT            |                  |     1 |    87 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP              |     1 |    87 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | EMP_ENAME_FUNIND |     1 |       |     1   (0)| 00:00:01 |

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

Predicate Information (identified by operation id):

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

2 - access(LOWER("ENAME")='scott')

Note

-----

- dynamic sampling used for this statement

Statistics

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

0  recursive calls

0  db block gets

0  consistent gets

0  physical reads

0  redo size

0  bytes sent via SQL*Net to client

0  bytes received via SQL*Net from client

0  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

6、索引监控

SQL> conn scott/tiger

Connected.

SQL> alter index emp_ename_funind monitoring usage;

Index altered.

SQL> select index_name,table_name,monitoring,used from v$object_usage;

INDEX_NAME                     TABLE_NAME      MONITORIN USED

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

EMP_ENAME_FUNIND               EMP             YES       NO

SQL> select * from emp where LOWER(ename)='scott';

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

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

7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20

SQL> select * from emp where lower(ename)='scott';

EMPNO ENAME           JOB                    MGR HIREDATE                   SAL       COMM     DEPTNO

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

7788 SCOTT           ANALYST               7566 1987-04-19 00:00:00       3000                    20

SQL> select index_name,table_name,monitoring,used from v$object_usage;

INDEX_NAME                     TABLE_NAME      MONITORIN USED

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

EMP_ENAME_FUNIND               EMP             YES       YES

7、【反向索引----------用于建立索引的列值是连续的或通过序列生成时,避免索引存放到集中的leaf block,避免生成热块】。

1)建立反向索引

SQL> create index r_empno_ind on test(empno) reverse;

Index created.

——【对于emp表里empno列来说,因为客户ID号顺序递增,所以为了均衡索引数据分布,应在该列上建立反向索引。】

2)重建索引

SQL> alter index r_empno_ind rebuild reverse;

Index altered.

8、与索引有关的视图

DBA_INDEXES:

DBA_IND_COLUMNS:

V$OBJECT_USAGE:

Oracle11g温习-第十三章:索引的更多相关文章

  1. Oracle11g温习-第十七章:权限管理

    2013年4月27日 星期六 10:50 1.权限(privilege):     [system privilege(系统权限):针对于database 的相关权限         object p ...

  2. Oracle11g温习-第十一章:管理undo

    2013年4月27日 星期六 10:40 1.undo tablespace 功能 undo tablespace 功能:用来存放从datafiles 读出的数据块旧的镜像 [             ...

  3. Oracle11g温习-第七章:redo日志

      2013年4月27日 星期六 10:33 1.redo (重做) log 的功能:        用于数据恢复   2.redo log 特征: [特征]: 1)   记录数据块的变化(DML.D ...

  4. Oracle11g温习-第六章:控制文件

    2013年4月27日 星期六 10:33  .控制文件的功能和特点 1) [定义数据库当前物理状态] 2) [维护数据的一致性]  如果控制文件中的检查点与数据文件中的一致,则说明数据一致,可以启动到 ...

  5. Oracle11g温习-第五章:数据字典

    1.数据字典(Data dictionary)的功能 1)   central of oracle   database               每个oracle数据库的核心 2)   descr ...

  6. Oracle11g温习-第四章:手工建库

     1.create database plan 1.库类型:   OLTP :  在线事务处理系统   OLAP : 在线应用处理系统   DSS :    数据决策系统 2.数据库名字及字符集 3. ...

  7. Oracle11g温习-第三章:instance实例管理

    2013年4月27日 星期六 10:30 1.instance 功能:   用于管理和访问database. 2.init parameter files :管理实例相关启动参数.位置:$ORACLE ...

  8. 第十三章——表和索引分区(1)——使用Range Left进行表分区

    原文:第十三章--表和索引分区(1)--使用Range Left进行表分区 前言: 如果数据表的数据持续增长,并且表中的数据量已经达到数十亿甚至更多,数据的查询和操作将非常困难,面对非常庞大的表,几时 ...

  9. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

随机推荐

  1. ISE14.7兼容性问题集锦https://www.cnblogs.com/ninghechuan/p/7241371.html

    ISE14.7兼容性问题集锦 对于电子工程师来说,很多电路设计仿真软件都是特别大的,安装下来一般都是上G,甚至几十G,而且win7的兼容性也是最好的,不愿意升级win10是因为麻烦,而且没有必要,对于 ...

  2. usart2 重映射

    今天拾起闲置很久的灰机,测试发现nrf2401坏掉,重新淘宝.还发现机上搭载的usart1坏掉,换成usart2,发现端口被电机占用,重映射到PD5,PD6 关键是后面两句不要忘记了 RCC_APB1 ...

  3. 浅谈循环中setTimeout执行顺序问题

    浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...

  4. Linux命令之nl命令

    nl 命令在 Linux 系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号,其默认的结果和 与 cat -n 有点不太一样,nl 可以将行号做比较多的显示设计,包括位数是否自动补齐 ...

  5. 1月4日笔记 vi编辑器

      Penn   vi编辑器,全称是visual interface,可以执行输出.删除.查找.替换等众多的文本操作. vi并不是一个排版程序,不可以对字体.格式.段落等其他的属性进行编排. vi是全 ...

  6. C语言 深入学习

    浮点数: x = Mx*2^Ex为一个规格化浮点数,Mx为x的尾数,Ex为x的阶码. 1e-6:表示1 * 10 ^ (-6). 编译时执行: sizeof是运算符(而非函数),在编译时执行,不会导致 ...

  7. python-ConfigParser模块【读写配置文件】

    对python 读写配置文件的具体方案的介绍 1,函数介绍 import configParser 如果Configparser无效将导入的configParser 的C小写 1.1.读取配置文件 - ...

  8. Python 安装 lxml 插件

    1.下载 lxml 地址:https://pypi.python.org/pypi/lxml/3.8.0#downloads 我用的是python 3.6,我下载了  lxml-3.8.0-cp36- ...

  9. JTopo使用心得

    因为工作关系,最近用到了拓扑图,找了一溜工具后,发现了这个--JTopo,纯国产而且免费 当然了如果你英文水平足够好的话.也可以看看这些英文的做拓扑图的工具,以下网站出自知乎回答:开源HTML5 绘图 ...

  10. Python统计list中各个元素出现的次数

    来自:天蝎圣诞结 利用Python字典统计 利用Python的collection包下Counter类统计 利用Python的pandas包下的value_counts类统计 字典统计 a = [1, ...