反向索引与模糊查询

反向索引应用于前模糊的用法简介:

1、反向索引

SQL> create index ind_name on atest reverse(name);

SQL>  select * from atest where name like reverse ('%y');

2、联合部分反向索引

SQL> create index ind_idname on atest (id ,reverse(name));
索引已创建。
SQL> select * from atest where id=1 and name like reverse ('%y');
未选定行

具体用法展示如下:

反向索引与模糊查询
---------------------
版本
SQL> select * from v$version;
BANNER                                                                         
----------------------------------------------------------------               
Oracle Database10gEnterprise Edition Release 10.2.0.4.0 - Prod               
PL/SQL Release 10.2.0.4.0 - Production                                         
CORE 10.2.0.4.0 Production                                                     
TNS for 32-bit Windows: Version 10.2.0.4.0 - Production                        
NLSRTL Version 10.2.0.4.0 - Production                                         
测试数据
SQL> conn an/an
已连接。
SQL> create table atest(id int,name varchar2(100));
表已创建。
SQL> insert into atest select 1,'anbaisheng' from dual;
已创建 1 行。
SQL> insert into atest select 2,'xiangxiang' from dual;
已创建 1 行。
SQL> insert into atest select 3,'baby' from dual;
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from atest;
        ID NAME                                                                
---------- --------------------                                                
         1 anbaisheng                                                          
         2 xiangxiang                                                          
         3 baby                                                                
创建正续索引
SQL> createindexind_name on atest(name);
索引已创建。
SQL> set autotrace on
SQL> select * from atest where name like 'a%';
ID NAME                                                                
---------- --------------------                                                
         1 anbaisheng                                                          
                                                                               
--------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |    65 |     2   (0)| 00
|   1 |  TABLE ACCESS BY INDEX ROWID| ATEST    |     1 |    65 |     2   (0)| 00
|*  2 |   INDEX RANGE SCAN          | IND_NAME |     1 |       |     1   (0)| 00
--------------------------------------------------------------------------------
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   2 - access("NAME" LIKE 'a%')                                                
       filter("NAME" LIKE 'a%')                                                

SQL> select * from atest where name like '%y';
ID NAME                                                                
---------- --------------------                                                
         3 baby                                                                

---------------------------------------------------------------------------    
| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |    
---------------------------------------------------------------------------    
|   0 | SELECT STATEMENT  |       |     1 |    65 |     3   (0)| 00:00:01 |    
|*  1 |  TABLE ACCESS FULL| ATEST |     1 |    65 |     3   (0)| 00:00:01 |    
---------------------------------------------------------------------------    
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   1 - filter("NAME" LIKE '%y')                                                
                                                                             
正向索引后模糊查询有效,前模糊无效
 
创建反向索引
SQL> drop index ind_name;
索引已删除。
SQL> create index ind_name on atest reverse(name);
索引已创建。
SQL>  select * from atest where name like '%y';
ID NAME                                                                
---------- --------------------                                                
         3 baby                                                                

---------------------------------------------------------------------------    
| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |    
---------------------------------------------------------------------------    
|   0 | SELECT STATEMENT  |       |     1 |    65 |     3   (0)| 00:00:01 |    
|*  1 |  TABLE ACCESS FULL| ATEST |     1 |    65 |     3   (0)| 00:00:01 |    
---------------------------------------------------------------------------    
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   1 - filter("NAME" LIKE '%y')                                                
                                                                               

SQL>  select * from atest where name like reverse ('%y');
未选定行
                                                                               
--------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |    65 |     0   (0)| 00
|   1 |  TABLE ACCESS BY INDEX ROWID| ATEST    |     1 |    65 |     0   (0)| 00
|*  2 |   INDEX RANGE SCAN          | IND_NAME |     1 |       |     0   (0)| 00
--------------------------------------------------------------------------------
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   2 - access("NAME" LIKE 'y%')                                                
       filter("NAME" LIKE 'y%')                                                
                                                                               
就算建上反向索引,不使用reverse关键字前模糊也没用,后模糊无效
 
联合部分反向索引
这个conception里都没说,自己试了下,还成
SQL> create index ind_idname on atest (id ,reverse(name));
索引已创建。
SQL> select * from atest where id=1 and name like reverse ('%y');
未选定行

--------------------------------------------------------------------------------
| Id  | Operation                   | Name     | Rows  | Bytes | Cost (%CPU)| Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |          |     1 |    65 |     0   (0)| 00
|*  1 |  TABLE ACCESS BY INDEX ROWID| ATEST    |     1 |    65 |     0   (0)| 00
|*  2 |   INDEX RANGE SCAN          | IND_NAME |     1 |       |     0   (0)| 00
--------------------------------------------------------------------------------
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   1 - filter("ID"=1)                                                          
   2 - access("NAME" LIKE 'y%')                                                
       filter("NAME" LIKE 'y%')                                                
                                                                               
SQL>  select * from atest where id=1 and name like '%y';
未选定行
--------------------------------------------------------------------------------
| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |            |     1 |    65 |     2   (0)|
|*  1 |  TABLE ACCESS BY INDEX ROWID| ATEST      |     1 |    65 |     2   (0)|
|*  2 |   INDEX RANGE SCAN          | IND_IDNAME |     1 |       |     1   (0)|
--------------------------------------------------------------------------------
                                                                               
Predicate Information (identified by operation id):                            
---------------------------------------------------                            
                                                                               
   1 - filter("NAME" LIKE '%y')                                                
   2 - access("ID"=1)                                                          
                                                                               
就算是联合索引,不使用reverse的话意义也不大

Oracle模糊查询之(2.如何测试模糊查询的时间及使用是否使用索引)反向索引与模糊查询相关推荐

  1. MySQL讲义第 39 讲——select 查询之函数(2):日期时间型函数

    MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 文章目录 MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 一.数据准备 二.MySQL 日期时间型函 ...

  2. MySQL索引系列--索引的优化--LIKE模糊查询

    原文网址:MySQL索引系列--索引的优化--LIKE模糊查询_IT利刃出鞘的博客-CSDN博客 简介         本文介绍MySQL的LIKE模糊查询索引的优化.主要是索引失效的解决方案. 索引 ...

  3. oracle 测试库搭建,Oracle Study之--通过RMAN克隆测试库

    Oracle Study之--通过RMAN克隆测试库 通过使用数据库备份,DBA可以在同一服务器或其它服务器上建立副本数据库.这个副本数据库可以和主数据库有相同的名称(拷贝)或与主数据库名称不同(克隆 ...

  4. mysql 查询姓王_MySQL查询语句练习题,测试足够用了

    MySQL查询语句练习题,测试足够用了 博客分类: http://blog.sina.com.cn/s/blog_767d65530101861c.html 1.创建student和score表 CR ...

  5. oracle联合主键 索引,关于复合主键查询时使用索引研究

    当数据库创建表时,每个表只能有一个主键,但是如果想让多个列都成为主键时,就要用到复合主键. 一.主键唯一约束 我们知道当某列为主键时,Oracle会自动将此列创建唯一约束.也就是说不允许有相同的值出现 ...

  6. 【Java】设计银行账户类。包括帐号、姓名、开户时间、余额,成员方法包括存款、取款、查询余额,计算利息等。对所设计的类进行测试。

    设计银行账户类.包括帐号.姓名.开户时间.余额,成员方法包括存款.取款.查询余额,计算利息等.对所设计的类进行测试. 要求 代码 要求 设计银行账户类.包括帐号.姓名.开户时间.余额,成员方法包括存款 ...

  7. 软件测试查询语句例题,SQL查询经典例题 - 青苹果测试博客 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    通过以下习题的练习,我们能快速熟悉掌握sql语句查询的语法和要领,大家要用心领会其中的要领和步骤,要学会分析步骤. 一.单表查询练习 1.查询,查询学生"张三"的全部基本信息 Se ...

  8. //设计银行账户类。包括帐号、姓名、开户时间、余额,成员方法包括存款、取款、查询余额,计算利息等。对所设计的类进行测试。

    import java.util.Scanner; public class Bank {//设计银行账户类.包括帐号.姓名.开户时间.余额,成员方法包括存款.取款.查询余额,计算利息等.对所设计的类 ...

  9. Oracle EBS 洽谈报价的操作流程测试

    Oracle EBS 洽谈报价的操作流程测试 1.定义洽谈报价的事务处理类型 2.分配行流 3.设置审批 4.单据序列配置 5.序列分配 6.录入销售报价,并提交. 点击行项目时,系统报错. 点击确定 ...

最新文章

  1. leetcode 3. Longest Substring Without Repeating Characters
  2. 仿小米简约Calculator
  3. 用python画太阳花-python 简单的绘图工具turtle使用详解
  4. jquery学习之1.20-获取同辈元素和子元素
  5. hdu3415 单调队列模板题
  6. php 不同权限登录界面,PHP中如何实现不同权限进入不同页面_后端开发
  7. Linux平台安装xtools
  8. c swap方法在哪个库里面_swap
  9. 在制造业中推进机器人技术的五种方法
  10. 十一、飞机大战(IVX 快速开发教程)
  11. 软件工程师如何自学成才?
  12. 【链表】剑指offer:反转链表
  13. VMware Workstation v14.1.3 精简特别版本
  14. 计算机网络技术毕业生实习报告_计算机毕业实习报告8篇完美版
  15. 服务器维修工程师个人简历,机械维修工程师个人简历模板精选
  16. cron每小时执行一次_crontab每小时运行一次
  17. HTTP协议为什么是无状态的?无状态指的是什么
  18. colormap保存 matlab_[转载]matlab的colormap的保存
  19. 计算机音乐谱成都.,抖音成都计算器谱子是什么 抖音成都计算器谱子分享
  20. 困境下的SEO,站长如何自渡?

热门文章

  1. R语言怎么导入表格画图_excell表格的电话号码要怎么导入手机通讯录进行电话本营销...
  2. 用计算机确定照片的黑白灰,快乐学修图(4) 黑白灰,照片中调色密码
  3. 反爬-今日头条cookie登录和豆瓣session维持会话
  4. Redis原理--为什么性能高,速度快?
  5. Nginx location中斜线\
  6. powerdesigner箭头标识
  7. vue.js项目实战运用篇之抖音视频APP-第八节: 视频播放功能
  8. js 对象数组互相转换
  9. java 当前周_java获取当前周次
  10. moudo网络库剖析