oracle多个字段匹配,请教一个多字段匹配查询问题

SQL> create table t as select * from dba_objects;

表已创建。

SQL> create index ind_t_object_name on t(object_name);

索引已创建。

SQL> select count(0) from t;

COUNT(0)

----------

72168

SQL> select * from t where object_name='GV_$RESULT_CACHE_MEMORY';

执行计划

----------------------------------------------------------

Plan hash value: 3840353680

-------------------------------------------------------------------------------------------------

| Id  | Operation                   | Name              | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |                   |     1 |   207 |     4   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| T                 |     1 |   207 |     4   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IND_T_OBJECT_NAME |     1 |       |     3   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------------

SQL> select * from t where object_name like 'GV_$R%';

已选择38行。

执行计划

----------------------------------------------------------

Plan hash value: 3840353680

-------------------------------------------------------------------------------------------------

| Id  | Operation                   | Name              | Rows  | Bytes | Cost (%CPU)| Time     |

-------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |                   |    38 |  7866 |    23   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| T                 |    38 |  7866 |    23   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IND_T_OBJECT_NAME |    38 |       |     3   (0)| 00:00:01 |

-------------------------------------------------------------------------------------------------

这个也走索引,但是当字符小于4个是,走全表了。

SQL> select * from t where object_name like 'GV_%';

已选择973行。

执行计划

----------------------------------------------------------

Plan hash value: 1601196873

--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |   973 |   196K|   289   (1)| 00:00:04 |

|*  1 |  TABLE ACCESS FULL| T    |   973 |   196K|   289   (1)| 00:00:04 |

--------------------------------------------------------------------------

SQL> select * from t where object_name like '%GV_$RESULT_CACHE_MEMORY';

执行计划

----------------------------------------------------------

Plan hash value: 1601196873

--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |    12 |  2484 |   289   (1)| 00:00:04 |

|*  1 |  TABLE ACCESS FULL| T    |    12 |  2484 |   289   (1)| 00:00:04 |

--------------------------------------------------------------------------

SQL> create index ind_reverse_t_object_name on t(reverse(object_name));

索引已创建。

SQL> select * from t where reverse(object_name) like reverse('%GV_$RESULT_CACHE_MEMORY');

执行计划

----------------------------------------------------------

Plan hash value: 3013310751

---------------------------------------------------------------------------------------------------------

| Id  | Operation                   | Name                      | Rows  | Bytes | Cost (%CPU)| Time  |

---------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |                           |  3625 |   966K|   286   (0)| 00:00:04 |

|   1 |  TABLE ACCESS BY INDEX ROWID| T                         |  3625 |   966K|   286   (0)| 00:00:04 |

|*  2 |   INDEX RANGE SCAN          | IND_REVERSE_T_OBJECT_NAME |   652 |       |     6   (0)| 00:00:01 |

---------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值