- 浏览: 514969 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:http://blog.csdn.net/haiross/article/details/12974581
评:数据库索引分为 正向与反向索引,模糊查询时 注意编写sql是可以走 索引的
反向索引与模糊查询
反向索引应用于前模糊的用法简介:
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 Database 10g Enterprise 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> create index ind_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的话意义也不大
评:数据库索引分为 正向与反向索引,模糊查询时 注意编写sql是可以走 索引的
反向索引与模糊查询
反向索引应用于前模糊的用法简介:
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 Database 10g Enterprise 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> create index ind_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的话意义也不大
发表评论
-
c3p0数据库连接池不能取到连接An attempt by a client to checkout a Connection has timed out
2018-09-07 11:17 483源:https://blog.csdn.net/attilax ... -
The last packet successfully received from the server was 179 milliseconds ago.
2018-05-22 14:59 909源:http://elf8848.iteye.com/blog ... -
RAID详解[RAID0/RAID1/RAID10/RAID5]
2018-03-26 16:30 501源:http://blog.chinaunix.net ... -
Oracle模糊查询之(3.2从使用函数和sql语法角度来提高模糊查询效率 二)ORACLE中Like与Instr模糊查询性能大比拼
2016-03-24 16:16 642源:http://blog.csdn.net/haiross/ ... -
mysql创建用户
2013-05-21 23:37 743源:http://persistc.iteye.com/bl ... -
PostgreSQL 9.3 新特性预览 —— JSON 操作
2013-05-08 19:09 1195源:http://www.oschina.net/quest ... -
数据库行列转换
2013-03-28 19:32 916源:http://wenku.baidu.com/view/ ... -
多表连接原理
2013-03-09 14:28 1060源: 评: 学习数据 ... -
DB2 JDBC Driver
2013-03-05 20:05 884源:http://www.oschina.net/p/db2 ... -
mysql数据库备份及恢复命令mysqldump,source的用法
2013-02-03 21:26 1027还原一个数据库:mysql -h localhost -u ... -
数据库视图有什么作用?
2013-01-15 19:22 1440源:http://bbs.csdn.net/topic ... -
15 个必须知道的 Java 面试问题(2年工作经验)
2013-01-15 19:19 1566源:http://www.oschina.net/quest ...
相关推荐
5. 索引引擎提取词法分析器中的所有标记、文档段在分段器中的偏移量以及被称为非索引字的低信息含量字列表,并构建反向索引。 使用Oracle Text需要具有CTXAPP角色或者是CTXSYS用户。具有CTXAPP角色的用户可执行以下...
在Oracle实时应用集群中,尤其是在值连续增长的列上,反向索引表现出色。 2.3 位图索引 位图索引适用于列值较少的情况,它为每个可能的列值创建一个位图,使用位元表示对应行是否包含该值。位图索引能够节省空间,...
Oracle数据库是世界上最广泛使用的数据库系统之一,其性能优化的一个关键因素就是索引的使用。索引可以帮助快速查找和访问数据库中的数据,显著提高查询效率。本篇将详细讲解Oracle数据库中的索引及其重要性。 一、...
本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数索引。 1. **B*Tree索引**: - B*Tree索引是Oracle中最常见的索引类型,其结构类似于二叉树,可以高效地处理高基数数据列,即具有...
CBO(Cost-Based Optimizer):成本基于优化器,这是Oracle数据库查询优化器的一部分,它使用统计信息来评估不同查询执行计划的成本,选择最有效的查询路径。CBO会考虑到索引的存在、索引的统计信息以及表的统计...
总的来说,理解Oracle索引的工作原理并适当使用,是实现数据库高效运行的关键。正确选择和设计索引,避免使用限制索引的因素,能显著提高查询性能,减少数据库响应时间,从而提升整个系统的性能。在实践中,需要结合...
Oracle数据库中的索引是优化查询性能的关键工具,它允许快速定位和访问数据。常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构...
本篇文章将深入探讨Oracle索引的学习,重点关注索引的原理、类型、优缺点以及如何使用和分析执行计划。 首先,理解索引的基本概念。索引是一种特殊的数据结构,它存储在表空间中,用于加速对表数据的访问。当执行...
当使用 B-树索引时,Oracle 顺着索引节点树向下查找有查询选择条件相匹配的索引项。 (2)反向键索引 反向键索引是一种特殊类型的索引,它可以快速查找具有相同列值的记录。反向键索引是基于表中的一个或多个列...
Oracle索引是数据库管理系统中用于提高查询效率的重要数据结构。它的工作原理类似于书籍的目录,允许数据库系统快速定位到所需的数据行,而无需扫描整个表。索引的存在使得对大量数据的查找、排序和聚合操作变得更加...
Oracle索引优化是数据库性能调优的关键环节,它关乎到数据检索速度和整体系统的效率。在Oracle数据库中,索引的种类繁多,包括B*Tree索引、反向索引、降序索引、位图索引和函数索引等。理解并正确使用这些索引类型...
反向索引是B*Tree索引的一种变体,它通过反转字节来实现更均匀的索引分布,降低竞争。 2. **降序索引**:8i版本后引入,专为降序排序的查询设计,使得逆序查找更为高效。 3. **位图索引**:主要用于OLAP(在线分析...
应用系统的性能直接与索引的建立是否合理直接有关。 一、建立索引 建立索引的目的是为了提高对表的查询速度;对表有关列的取值进行检查。但是,对表进行 insert,update,delete 处理时,由于要表的存放位置记录到...
### Oracle索引类型详解 #### 一、B\*Tree索引:数据检索的基石 在Oracle数据库中,B\*Tree索引是最常见的索引结构,也是默认创建的索引类型。它基于二叉树原理,由分支块(branch block)和叶块(leaf block)构成,...
本文主要探讨了Oracle索引在数据查询中的应用,包括索引的基本概念、工作原理、使用场合以及优化策略。 首先,索引是一种特殊的数据结构,类似于书籍的目录,用于快速定位表中特定行的位置。Oracle使用B-Tree结构来...
4. Reverse索引:反向索引,将键值的字节顺序反转,减少键冲突,提高查询性能。 5. Index-organized table (IOT):索引组织表,数据存储在索引结构中,适合插入密集型操作。 三、索引的优点与缺点 优点: 1. 提高...
总之,理解Oracle索引的种类和工作原理对于数据库管理员和开发者来说至关重要,因为它直接影响到数据库系统的性能和效率。正确地设计和管理索引能够极大地提升数据库的查询速度,从而提高整个系统的服务质量和用户...