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. [bootstrapValidator] - bootstrap的验证工具

    翻了下之前和同事做的一个验证 <!--bootstrapValidator--> <script type="text/javascript" th:inline ...

  2. Python 安装与环境变量配置

    一.软件下载 Python安装包下载地址:https://www.python.org/ 二.安装过程(略) 三.环境变量配置: 方法一:使用cmd命令添加path环境变量 在cmd下输入: path ...

  3. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

  4. Jenkins参数化构建(三)之 Jenkins从文件中读取运行参数

    安装Extended Choice Parameter插件 选择‘参数化构建过程’ maven command line中进行引用 clean test -DsuiteXmlFile=src/main ...

  5. C++类的大小——sizeof(class)

    第一:空类的大小 class CBase { }; 运行cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; ...

  6. 进度条的制作-python

    import time,sys def view_bar(num, total): rate = float(num) / float(total) rate_num = int(rate * 100 ...

  7. 【Python】【socket】

    [server.py] """#练习1import socketimport threading sock = socket.socket()sock.bind(('12 ...

  8. activity 运行流程

    图1 图2 图3 图四

  9. ashx和aspx的区别

    1. ashx是一般处理程序,一般返回的数据有两种,一种是html页面,一种是只返回一个字符串. 2. aspx是web窗体程序,每次新建都回自带一个界面和一个后台处理程序. 3. 根据以上两点,可以 ...

  10. python 汉字编码问题

    问题描述:我要判断的两个字符串是否相等(‘区站号’==‘区站号’),第一个值是我从txt文件导入的数据,第二个值是我自己定义的并使用decode('utf-8')得到的,如果你用print函数打印这两 ...