WEB开发网
开发学院数据库Oracle 如何在Oracle数据库字段上建立索引 阅读

如何在Oracle数据库字段上建立索引

 2007-05-10 12:18:00 来源:WEB开发网   
核心提示: 值得庆幸的是,如果在这种情况下想要强制使用索引,如何在Oracle数据库字段上建立索引(2),有一种简便的方法:只要在WHERE 子句中增加一个或多个特定的条件,用于测试索引值,但是,其执行过程如下所示,并减少需要扫描的行,但这并没有修改原来SQL 编码中的条件

值得庆幸的是,如果在这种情况下想要强制使用索引,有一种简便的方法:只要在WHERE 子句中增加一个或多个特定的条件,用于测试索引值,并减少需要扫描的行,但这并没有修改原来SQL 编码中的条件。以下列查询语句为例:

SQL> select address from address where upper(name) like 'JO%' AND (name
 like 'J%' or name like 'j%');

使用这种查询语句(已设置AUTOTRACE),可得到下列结果:

ADDRESS
  cleveland
  1 row selected.
  Execution Plan
  SELECT STATEMENT
    CONCATENATION
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I

现在,优化器为WHERE 子句中AND 联结的两个语句中每一个语句确定的范围进行扫描----第二个语句没有引用函数,因而使用了索引。在两个范围扫描后,将运行结果合并。

在这个例子中,如果数据库有成百上千行,可以用下列方法扩充WHERE 子句,进一步缩小扫描范围:

select address from address where upper(name) like 'JOHN' AND (name like 'JO%'
 or name like 'jo%' or name like 'Jo' or name like 'jO' );

得到的结果与以前相同,但是,其执行过程如下所示,表明有4个扫描范围。

Execution Plan
   SELECT STATEMENT
    CONCATENATION
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I
      TABLE ACCESS BY INDEX ROWID ADDRESS
        INDEX RANGE SCAN ADDRESS_I

Tags:如何 Oracle 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接