zoukankan      html  css  js  c++  java
  • 用示例说明全文索引的性能优势

    一、实验说明:

         操作系统:rhel 5.4 x86

         数据库:Oracle 11g R2

    二、操作步骤:

       2.1、首先创建一个表t_btree,并创建B-Tree索引,索引键是object_name:

    1 SQL> create table t_btree as select * from dba_objects;
    2 
    3 Table created.
    4 
    5 SQL> create index ind_btree on t_btree(object_name);
    6 
    7 Index created.

       接着是执行下面的查询语句两次:

     1 SQL> set linesize 150;
     2 SQL> set autotrace on;
     3 SQL> select count(*) from t_btree where t_btree.object_name like '%ObjectStreamClass%';
     4 
     5   COUNT(*)
     6 ----------
     7     84
     8 
     9 
    10 Execution Plan
    11 ----------------------------------------------------------
    12 Plan hash value: 3266099700
    13 
    14 -----------------------------------------------------------------------------------
    15 | Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time      |
    16 -----------------------------------------------------------------------------------
    17 |   0 | SELECT STATEMENT      |       |    1 |    66 |   103   (0)| 00:00:02 |
    18 |   1 |  SORT AGGREGATE       |       |    1 |    66 |           |      |
    19 |*  2 |   INDEX FAST FULL SCAN| IND_BTREE |    12 |   792 |   103   (0)| 00:00:02 |
    20 -----------------------------------------------------------------------------------
    21 
    22 Predicate Information (identified by operation id):
    23 ---------------------------------------------------
    24 
    25    2 - filter("T_BTREE"."OBJECT_NAME" IS NOT NULL AND
    26           "T_BTREE"."OBJECT_NAME" LIKE '%ObjectStreamClass%')
    27 
    28 Note
    29 -----
    30    - dynamic sampling used for this statement (level=2)
    31 
    32 
    33 Statistics
    34 ----------------------------------------------------------
    35      28  recursive calls
    36       0  db block gets
    37     454  consistent gets
    38     726  physical reads
    39       0  redo size
    40     422  bytes sent via SQL*Net to client
    41     419  bytes received via SQL*Net from client
    42       2  SQL*Net roundtrips to/from client
    43       0  sorts (memory)
    44       0  sorts (disk)
    45       1  rows processed
    46 
    47 SQL> select count(*) from t_btree where t_btree.object_name like '%ObjectStreamClass%';
    48 
    49   COUNT(*)
    50 ----------
    51     84
    52 
    53 
    54 Execution Plan
    55 ----------------------------------------------------------
    56 Plan hash value: 3266099700
    57 
    58 -----------------------------------------------------------------------------------
    59 | Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time      |
    60 -----------------------------------------------------------------------------------
    61 |   0 | SELECT STATEMENT      |       |    1 |    66 |   103   (0)| 00:00:02 |
    62 |   1 |  SORT AGGREGATE       |       |    1 |    66 |           |      |
    63 |*  2 |   INDEX FAST FULL SCAN| IND_BTREE |    12 |   792 |   103   (0)| 00:00:02 |
    64 -----------------------------------------------------------------------------------
    65 
    66 Predicate Information (identified by operation id):
    67 ---------------------------------------------------
    68 
    69    2 - filter("T_BTREE"."OBJECT_NAME" IS NOT NULL AND
    70           "T_BTREE"."OBJECT_NAME" LIKE '%ObjectStreamClass%')
    71 
    72 Note
    73 -----
    74    - dynamic sampling used for this statement (level=2)
    75 
    76 
    77 Statistics
    78 ----------------------------------------------------------
    79       0  recursive calls
    80       0  db block gets
    81     369  consistent gets
    82       0  physical reads
    83       0  redo size
    84     422  bytes sent via SQL*Net to client
    85     419  bytes received via SQL*Net from client
    86       2  SQL*Net roundtrips to/from client
    87       0  sorts (memory)
    88       0  sorts (disk)
    89       1  rows processed

      2.2、创建表t_bmap,并创建BitMap索引:

    1 SQL> create table t_bmap as select * from dba_objects;
    2 
    3 Table created.
    4 SQL> create bitmap index ind_bmap on t_bmap(object_name);
    5 
    6 Index created。

      执行之前的同样的语句查询:

     1 SQL> select count(*) from t_bmap where t_bmap.object_name like '%ObjectStreamClass%';
     2 
     3   COUNT(*)
     4 ----------
     5     84
     6 
     7 
     8 Execution Plan
     9 ----------------------------------------------------------
    10 Plan hash value: 891302759
    11 
    12 ------------------------------------------------------------------------------------------
    13 | Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
    14 ------------------------------------------------------------------------------------------
    15 |   0 | SELECT STATEMENT          |      |     1 |    66 |   263   (0)| 00:00:04 |
    16 |   1 |  SORT AGGREGATE           |      |     1 |    66 |          |      |
    17 |   2 |   BITMAP CONVERSION COUNT     |      |    12 |   792 |   263   (0)| 00:00:04 |
    18 |*  3 |    BITMAP INDEX FAST FULL SCAN| IND_BMAP |     |     |          |      |
    19 ------------------------------------------------------------------------------------------
    20 
    21 Predicate Information (identified by operation id):
    22 ---------------------------------------------------
    23 
    24    3 - filter("T_BMAP"."OBJECT_NAME" IS NOT NULL AND "T_BMAP"."OBJECT_NAME" LIKE
    25           '%ObjectStreamClass%')
    26 
    27 Note
    28 -----
    29    - dynamic sampling used for this statement (level=2)
    30 
    31 
    32 Statistics
    33 ----------------------------------------------------------
    34      28  recursive calls
    35       0  db block gets
    36     360  consistent gets
    37     591  physical reads
    38       0  redo size
    39     422  bytes sent via SQL*Net to client
    40     419  bytes received via SQL*Net from client
    41       2  SQL*Net roundtrips to/from client
    42       0  sorts (memory)
    43       0  sorts (disk)
    44       1  rows processed
    45 
    46 SQL> select count(*) from t_bmap where t_bmap.object_name like '%ObjectStreamClass%';
    47 
    48   COUNT(*)
    49 ----------
    50     84
    51 
    52 
    53 Execution Plan
    54 ----------------------------------------------------------
    55 Plan hash value: 891302759
    56 
    57 ------------------------------------------------------------------------------------------
    58 | Id  | Operation              | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
    59 ------------------------------------------------------------------------------------------
    60 |   0 | SELECT STATEMENT          |      |     1 |    66 |   263   (0)| 00:00:04 |
    61 |   1 |  SORT AGGREGATE           |      |     1 |    66 |          |      |
    62 |   2 |   BITMAP CONVERSION COUNT     |      |    12 |   792 |   263   (0)| 00:00:04 |
    63 |*  3 |    BITMAP INDEX FAST FULL SCAN| IND_BMAP |     |     |          |      |
    64 ------------------------------------------------------------------------------------------
    65 
    66 Predicate Information (identified by operation id):
    67 ---------------------------------------------------
    68 
    69    3 - filter("T_BMAP"."OBJECT_NAME" IS NOT NULL AND "T_BMAP"."OBJECT_NAME" LIKE
    70           '%ObjectStreamClass%')
    71 
    72 Note
    73 -----
    74    - dynamic sampling used for this statement (level=2)
    75 
    76 
    77 Statistics
    78 ----------------------------------------------------------
    79       0  recursive calls
    80       0  db block gets
    81     285  consistent gets
    82       0  physical reads
    83       0  redo size
    84     422  bytes sent via SQL*Net to client
    85     419  bytes received via SQL*Net from client
    86       2  SQL*Net roundtrips to/from client
    87       0  sorts (memory)
    88       0  sorts (disk)
    89       1  rows processed

      2.3、创建表t_all,并创建全文索引:

    1 SQL> create table t_all as select * from dba_objects;
    2 
    3 Table created.
    4 
    5 SQL> create index ind_all on t_all(object_name) indextype is ctxsys.context;
    6 
    7 Index created.

      下面改变一下查询语句,但是需要输出的结果是跟之前的一样:

     1 SQL> select count(*) from t_all where contains(t_all.object_name,'%ObjectStreamClass%')>0;
     2 
     3   COUNT(*)
     4 ----------
     5     84
     6 
     7 
     8 Execution Plan
     9 ----------------------------------------------------------
    10 Plan hash value: 3532980284
    11 
    12 ----------------------------------------------------------------------------
    13 | Id  | Operation     | Name    | Rows  | Bytes | Cost (%CPU)| Time       |
    14 ----------------------------------------------------------------------------
    15 |   0 | SELECT STATEMENT |       |     1 |    78 |     4   (0)| 00:00:01 |
    16 |   1 |  SORT AGGREGATE  |       |     1 |    78 |        |       |
    17 |*  2 |   DOMAIN INDEX     | IND_ALL |    35 |  2730 |     4   (0)| 00:00:01 |
    18 ----------------------------------------------------------------------------
    19 
    20 Predicate Information (identified by operation id):
    21 ---------------------------------------------------
    22 
    23    2 - access("CTXSYS"."CONTAINS"("T_ALL"."OBJECT_NAME",'%ObjectStreamCl
    24           ass%')>0)
    25 
    26 Note
    27 -----
    28    - dynamic sampling used for this statement (level=2)
    29 
    30 
    31 Statistics
    32 ----------------------------------------------------------
    33        2221  recursive calls
    34       0  db block gets
    35        2228  consistent gets
    36     267  physical reads
    37       0  redo size
    38     422  bytes sent via SQL*Net to client
    39     419  bytes received via SQL*Net from client
    40       2  SQL*Net roundtrips to/from client
    41     254  sorts (memory)
    42       0  sorts (disk)
    43       1  rows processed
    44 
    45 SQL> select count(*) from t_all where contains(t_all.object_name,'%ObjectStreamClass%')>0;
    46 
    47   COUNT(*)
    48 ----------
    49     84
    50 
    51 
    52 Execution Plan
    53 ----------------------------------------------------------
    54 Plan hash value: 3532980284
    55 
    56 ----------------------------------------------------------------------------
    57 | Id  | Operation     | Name    | Rows  | Bytes | Cost (%CPU)| Time       |
    58 ----------------------------------------------------------------------------
    59 |   0 | SELECT STATEMENT |       |     1 |    78 |     4   (0)| 00:00:01 |
    60 |   1 |  SORT AGGREGATE  |       |     1 |    78 |        |       |
    61 |*  2 |   DOMAIN INDEX     | IND_ALL |    35 |  2730 |     4   (0)| 00:00:01 |
    62 ----------------------------------------------------------------------------
    63 
    64 Predicate Information (identified by operation id):
    65 ---------------------------------------------------
    66 
    67    2 - access("CTXSYS"."CONTAINS"("T_ALL"."OBJECT_NAME",'%ObjectStreamCl
    68           ass%')>0)
    69 
    70 Note
    71 -----
    72    - dynamic sampling used for this statement (level=2)
    73 
    74 
    75 Statistics
    76 ----------------------------------------------------------
    77      48  recursive calls
    78       0  db block gets
    79     348  consistent gets
    80       0  physical reads
    81       0  redo size
    82     422  bytes sent via SQL*Net to client
    83     419  bytes received via SQL*Net from client
    84       2  SQL*Net roundtrips to/from client
    85       0  sorts (memory)
    86       0  sorts (disk)
    87       1  rows processed
  • 相关阅读:
    Orcle 导入数据eurusd.ctl
    Maven系列2pom.xml 配置详解
    UML关联&泛化的区别
    maven 创建工程
    maven 打包
    jprofiler安装和配置
    设计模式出现之前的几大原则
    检查启动情况linux
    领域模型
    解压命令tar
  • 原文地址:https://www.cnblogs.com/Richardzhu/p/2831221.html
Copyright © 2011-2022 走看看