Oracle全文索引的性能优势实例

一、实验说明:

操作系统:rhel 5.4 x86

数据库:Oracle 11g R2

二、操作步骤:

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

SQL> create table t_btree as select * from dba_objects;

Table created.

SQL> create index ind_btree on t_btree(object_name);

Index created.

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

SQL> set linesize 150;
SQL> set autotrace on;
SQL> select count(*) from t_btree where t_btree.object_name like ‘%ObjectStreamClass%‘;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 3266099700

-----------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time      |
-----------------------------------------------------------------------------------
|  0 | SELECT STATEMENT      |      |    1 |    66 |  103  (0)| 00:00:02 |
|  1 |  SORT AGGREGATE      |      |    1 |    66 |          |      |
|*  2 |  INDEX FAST FULL SCAN| IND_BTREE |    12 |  792 |  103  (0)| 00:00:02 |
-----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("T_BTREE"."OBJECT_NAME" IS NOT NULL AND
          "T_BTREE"."OBJECT_NAME" LIKE ‘%ObjectStreamClass%‘)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
    28  recursive calls
      0  db block gets
    454  consistent gets
    726  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(*) from t_btree where t_btree.object_name like ‘%ObjectStreamClass%‘;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 3266099700

-----------------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Bytes | Cost (%CPU)| Time      |
-----------------------------------------------------------------------------------
|  0 | SELECT STATEMENT      |      |    1 |    66 |  103  (0)| 00:00:02 |
|  1 |  SORT AGGREGATE      |      |    1 |    66 |          |      |
|*  2 |  INDEX FAST FULL SCAN| IND_BTREE |    12 |  792 |  103  (0)| 00:00:02 |
-----------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("T_BTREE"."OBJECT_NAME" IS NOT NULL AND
          "T_BTREE"."OBJECT_NAME" LIKE ‘%ObjectStreamClass%‘)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
    369  consistent gets
      0  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

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

1 SQL> create table t_bmap as select * from dba_objects;

3 Table created.
4 SQL> create bitmap index ind_bmap on t_bmap(object_name);

6 Index created。

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

SQL> select count(*) from t_bmap where t_bmap.object_name like ‘%ObjectStreamClass%‘;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 891302759

------------------------------------------------------------------------------------------
| Id  | Operation              | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT          |      |    1 |    66 |  263  (0)| 00:00:04 |
|  1 |  SORT AGGREGATE          |      |    1 |    66 |          |      |
|  2 |  BITMAP CONVERSION COUNT    |      |    12 |  792 |  263  (0)| 00:00:04 |
|*  3 |    BITMAP INDEX FAST FULL SCAN| IND_BMAP |    |    |          |      |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

3 - filter("T_BMAP"."OBJECT_NAME" IS NOT NULL AND "T_BMAP"."OBJECT_NAME" LIKE
          ‘%ObjectStreamClass%‘)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
    28  recursive calls
      0  db block gets
    360  consistent gets
    591  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(*) from t_bmap where t_bmap.object_name like ‘%ObjectStreamClass%‘;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 891302759

------------------------------------------------------------------------------------------
| Id  | Operation              | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT          |      |    1 |    66 |  263  (0)| 00:00:04 |
|  1 |  SORT AGGREGATE          |      |    1 |    66 |          |      |
|  2 |  BITMAP CONVERSION COUNT    |      |    12 |  792 |  263  (0)| 00:00:04 |
|*  3 |    BITMAP INDEX FAST FULL SCAN| IND_BMAP |    |    |          |      |
------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

3 - filter("T_BMAP"."OBJECT_NAME" IS NOT NULL AND "T_BMAP"."OBJECT_NAME" LIKE
          ‘%ObjectStreamClass%‘)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
    285  consistent gets
      0  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

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

SQL> create table t_all as select * from dba_objects;

Table created.

SQL> create index ind_all on t_all(object_name) indextype is ctxsys.context;

Index created.

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

SQL> select count(*) from t_all where contains(t_all.object_name,‘%ObjectStreamClass%‘)>0;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 3532980284

----------------------------------------------------------------------------
| Id  | Operation    | Name    | Rows  | Bytes | Cost (%CPU)| Time      |
----------------------------------------------------------------------------
|  0 | SELECT STATEMENT |      |    1 |    78 |    4  (0)| 00:00:01 |
|  1 |  SORT AGGREGATE  |      |    1 |    78 |        |      |
|*  2 |  DOMAIN INDEX    | IND_ALL |    35 |  2730 |    4  (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("CTXSYS"."CONTAINS"("T_ALL"."OBJECT_NAME",‘%ObjectStreamCl
          ass%‘)>0)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
      2221  recursive calls
      0  db block gets
      2228  consistent gets
    267  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
    254  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select count(*) from t_all where contains(t_all.object_name,‘%ObjectStreamClass%‘)>0;

COUNT(*)
----------
    84

Execution Plan
----------------------------------------------------------
Plan hash value: 3532980284

----------------------------------------------------------------------------
| Id  | Operation    | Name    | Rows  | Bytes | Cost (%CPU)| Time      |
----------------------------------------------------------------------------
|  0 | SELECT STATEMENT |      |    1 |    78 |    4  (0)| 00:00:01 |
|  1 |  SORT AGGREGATE  |      |    1 |    78 |        |      |
|*  2 |  DOMAIN INDEX    | IND_ALL |    35 |  2730 |    4  (0)| 00:00:01 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - access("CTXSYS"."CONTAINS"("T_ALL"."OBJECT_NAME",‘%ObjectStreamCl
          ass%‘)>0)

Note
-----
  - dynamic sampling used for this statement (level=2)

Statistics
----------------------------------------------------------
    48  recursive calls
      0  db block gets
    348  consistent gets
      0  physical reads
      0  redo size
    422  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

时间: 2024-10-27 20:49:03

Oracle全文索引的性能优势实例的相关文章

Oracle RAC的五大优势及其劣势

Oracle RAC的五大优势及其劣势 不同的集群产品都有自己的特点,RAC的特点包括如下几点: 双机并行.RAC是一种并行模式,并不是传统的主备模式.也就是说,RAC集群的所有成员都可以同时接收客户端的请求. 高可用性.RAC是Oracle数据库产品高可用性的解决方案,能够保证在集群中只要有一个节 不同的集群产品都有自己的特点,RAC的特点包括如下几点: ·双机并行.RAC是一种并行模式,并不是传统的主备模式.也就是说,RAC集群的所有成员都可以同时接收客户端的请求. ·高可用性.RAC是Or

Oracle 优化和性能调整

分析评价Oracle数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库用户响应时间又可以分为系统服务时间和用户等待时间两项,即:  数据库用户响应时间=系统服务时间+用户等待时间  因此,获得满意的用户响应时间有两个途径:一是减少系统服务时间,即提高数据库的吞吐量:二是减少用户等待时间,即减少用户访问同一数据库资源的冲突率.  数据库性能优化包括如下几个部分:  调整数据结构的设计 这一部分在开发信息系统之前完成,程序员需要考虑是否使用Oracle数据库的分区功能,对于经常访问的数

通过案例学调优之--Oracle 全文索引

通过案例学调优之--Oracle 全文索引 全文检索(oracle text)  Oracle Text使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力,Oracle Text 是 Oracle9i 采用的新名称,在 oracle8/8i 中被称为 oracle intermedia text,oracle8 以前是 oracle context cartridge.Oracle Text 的索引和查找功能并不局限于存储在数据库中的数据. 它可以对存储于文件系统中的文档进行检索和

Oracle 11g AWR性能报告

一.自动工作负载库(Automatic Workload Repository,AWR) 自动工作负载库(Automatic Workload Repository,AWR)是在Oracle公司提供的一个工具.AWR来可以自动收集.处理.并保存性能统计结果,这种统计数据存放在内存中并随后存储在数据库中,这些数据既能在报告中显示也可以通过视图查询.可以协助我们找出Oracle的性能瓶颈. AWR收集和处理的统计数据包括: 对象统计,用于确定数据库段(表.索引…)的访问情况 基于时间的统计:数据库活

Oracle PL/SQL 编程基础 实例

create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is begin insert into mytest values('fc','123'); end; 查看错误信息 show error 如何调用该过程: 1, exec 过程名 (参数,..) 2.  call 过程名 (参数  ) set server output on begin dbms_ou

Oracle PL/SQL 编程基础 实例 2

if  循环  控制语句 if--then        endif if----then ----else   endif if-----then --elsif then ----else     endif --编写一个过程,可以 输入一个雇员名,如果该雇员的工资低于2000就给他增加10% create   or replace procedure  sp_pro6(spName varchar2) is v_sal  emp.sal %type; begin select sal in

Oracle 数据库SQL性能查看

作为一个开发/测试人员,或多或少都得和数据库打交道,而对数据库的操作归根到底都是SQL语句,所有操作到最后都是操作数据,那么对sql性能的掌控又成了我们工作中一件非常重要的工作.下面简单介绍下一些查看oracle性能的一些实用方法: 1.查询每台机器的连接数 select t.MACHINE,count(*) from v$session t group by t.MACHINE 这里所说的每台机器是指每个连接oracle数据库的服务器,每个服务器都有配置连接数据库的连接数,以websphere

oracle调优 性能与安全的权衡

性能与安全的权衡 对于数据库调优而言,没有绝对的性能也没有绝对的安全.正如鱼和熊掌不能兼得一样,是不能完全兼顾的,就像是矛和盾此消彼长.下面就对比较常见的几个因素做一个简要的阐述: 1.多元化控制文件: 多个地方,意味着更安全,一个损坏了可以转储另外一个继续使用.但同样,越多也意味着IO压力越大,一般为2到3个控制文件多元化.比如:假设3个控制文件都损坏的概率已经相当低了,再多的控制文件也就没有意义了.因为一个控制文件损坏,数据库立刻就会崩溃,检查点的发生会产生预警信息,这样就可以根据提示人为的

ORACLE配置tnsnames.ora文件实例

ORACLE配置tnsnames.ora文件实例客户机为了和服务器连接,必须先和服务器上的监听进程联络.ORACLE通过tnsnames.ora文件中的连接描述符来说明连接信息.一般tnsnames.ora 是建立在客户机上的.如果是客户机/服务器结构,整个网络上只有一台机器安装了ORACLE数据库服务器,那么只需在每个要访问ORACLE服务器的客户机上定义该文件,在服务器上无需定义.但是,如果网络上有多台机器均安装了ORACLE数据库服务器,并且服务器之间有数据共享的要求,那么在每台服务器上都