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. Google advertiser api开发概述

    对象.方法和服务 AdWords API 主要供 AdWords 的高级用户使用.如果您是 AdWords 新手,或需要复习 AdWords 基本概念,请查看 AdWords 基础知识页面. 对象层级 ...

  2. Kubernetes工作流之Pods一

    This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...

  3. 设置pip代理

    参考: python-proxy-for-pip 设置pip代理 pip install -i http://pypi.douban.com/simple xxx 2018.4

  4. python学习 day06打卡

    今天学习的主要内容是: 一,小数据池 代码块的概念 python程序是由代码块构成的,一个代码块的文本作为python程序执行的单元. 代码块:一个模块,一个函数,一个类,甚至每一个command命令 ...

  5. ERP系统知识笔记

    中心思想: 1.不管哪一家的ERP系统,都是以“平衡供需”为目的.以计划为中心思想的,并将各管理职能作紧密的集成 2.手工管理方式下,对库存量的掌握是不完整的.手工方式下,我们的数据只有现存量,无法记 ...

  6. 《剑指offer》第五十八题(翻转单词顺序)

    // 面试题58(一):翻转单词顺序 // 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. // 为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a ...

  7. 一篇好文之Android数据库 GreenDao的完全解析

    数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...

  8. angular在组件中选择dom元素

    想选择 在组件中选择自己template里的dom元素,要使用ElementRef.     import { Component, EventEmitter, HostListener, OnIni ...

  9. lua中的闭包概念的学习笔记

    1.闭包的由来: 个人理解,lua中之所以出现闭包的概念,完全是因为lua中允许函数的嵌套定义,并且在内嵌函数中使用了外包函数中定义的局部变量,例如c.c#就不允许函数的嵌套定义(但是允许函数的嵌套调 ...

  10. 第 2 章 容器架构 - 008 - Docker 组件如何协作?

    容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本地没有 httpd 镜像. daemon 从 Docker Hub 下载镜像. 下载完成, ...