反向索引与模糊查询

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

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. jenkins配置git
  2. 用SQL命令查看Mysql数据库大小
  3. OSPF-LSA数据包头
  4. The RAII Programming Idiom
  5. linux命令free
  6. python webbrowser安装_如何为python webbrows设置BROWSER环境变量
  7. 位操作符:与,或,异或 狼羊菜
  8. 11 绑定方法与非绑定方法
  9. threejs特效:选中效果
  10. 字符串的哈希值mysql_字符串经典的hash算法
  11. amlogic logo amlogic rk tvbox 电视盒 定制化开发(一) 开机logo 定制
  12. VScode 本地或远程单文件和多文件调试精简配置
  13. MU计算机里代表什么,计算器上M+、M-、MU、GT等分别代表意思-mu代表啥
  14. 黄牛落泪!全球显卡价格纷纷跳水,高价囤货滞销
  15. html时显示当前时间的时钟,javascript实现页面的实时时钟显示示例
  16. Csharp基础整理
  17. TFN F1 工程 高校 通信都在用的光时域反射仪
  18. linux MQ 比较全面的操作命令
  19. 一个技术主管/团队Leader的工作职责有哪些?
  20. 【程序8】乒乓球比赛赛程安排

热门文章

  1. 爬取最新斗图啦网站上表情包
  2. Python文件逐行写入
  3. MATLAB人工大猩猩部队GTO优化CNN-LSTM用于多变量负荷预测
  4. python3操作redis消息队列
  5. Android 8.1 新增壁纸
  6. android屏幕碎了该怎么办,魅蓝不小心将屏幕摔碎如何自己更换屏幕
  7. C#开发之——CheckedListBox(12.12)
  8. java重定向和请求转发区别
  9. ensp交换机划分VLAN的配置
  10. python爬取b站用户_python爬取b站排行榜