- 浏览: 514946 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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/12974887
评:
转自http://sandish.itpub.net/post/4899/464369
众所周知,使用 like 进行模糊查询速度极差,包括 like 'AAA%' ,like '%AAA',like '%AAA%',like '%A%A%'以及采用“_”进行单字符匹配的那些模糊查询。网上有很多文章讲到如何提高like查询,提到 like 'AAA%'能够使用到索引,而like '%AAA' ,使用创建反向函数的索引来提高查询效率。但一般情况下,是无法约定客户端采用哪种like查询,难道说把所有的这些情况都进行if判断吗?
为这个事情脑袋疼了无数次。最近,一客户“无理”要求对用户地址模糊查询速度太慢。在数十万的用户记录下查询,要求5秒之内必须查询到记录。
想破脑袋还是找不到方法。有同事找了本Lucene的书给我看,说是能解决。翻来覆去的看了2,3遍,始终想不出这玩意儿怎么用。
突然想到oracle也有全文索引一说,以前只是别人提起过这个词。与网上朋友一聊,说是似乎可以解决,但他忘了怎么用了。
半夜12点,赶紧爬起来,到google上查资料。还真有两下子,研究了几个小时,有所获。第二天白天没时间研究,晚上继续,最终把全文索引搞定,解决了模糊查询速度慢的问题,在数十万条用户数据中, 对用户地址进行模糊查询速度在2秒以内就能够查到。
-------------------------------------------------------------------------
以下是创建全文索引的方法(网上有文章提到使用图形化界面,我用图形化界面创建全文索引,创建了一个晚上,第二天起床居然还没完。但用SQL命令15分钟左右就搞定):
对cmng_custominfo 表中的address字段做全文检索:
1,在oracle9201中需要创建一个分词的东西:
BEGIN
ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');
--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用
end;
2,创建全文检索:
CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');
3,查询时候,使用:
select * from cmng_custominfo where contains (address, '金色新城')>1;
自己测试,发现select * from cmng_custominfo where contains (address, '%金色新城%')>1;才能实现模糊查询,并且使用了索引,数据库版本为oracle9.0.1.1.1
4,需要定期进行同步和优化:
同步:根据新增记录的文本内容更新全文搜索的索引。
begin
ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');
end;
优化:根据被删除记录清除全文搜索索引中的垃圾
begin
ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');
end;
5,采用job做步骤4中的工作:
1)该功能需要利用oracle的JOB功能来完成
因为oracle9I默认不启用JOB功能,所以首先需要增加ORACLE数据库实例的JOB配置参数:
job_queue_processes=5
重新启动oracle数据库服务和listener服务。
2)同步 和 优化
--同步 sync:
variable jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');', SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;
--优化
variable jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');
commit;
END;
其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,可以根据应用的需要而定
6,索引重建
重建索引会删除原来的索引,重新生成索引,需要较长的时间。
重建索引语法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:
Oracle 的全文检索建立和维护索引要比ms sql server都要快得多,笔者的65万记录的一个表建立索引只需要20分钟,同步一次只需要1分钟。
因此,也可以考虑用job的办法定期重建索引。
参考资料:
1,http://blog.csdn.net/yurenjia/archive/2007/04/08/1556306.aspx
2,http://topic.csdn.net/u/20080117/23/34004f4a-4989-47ef-8764-0b7e3bf737a7.html
3,http://tenwe.com/tech/database/oracle/200702/content_561_4.shtml
4,http://www.knowsky.com/389357.html
5,http://yangtingkun.itpub.net/post/468/195520
6,http://bbs.zdnet.com.cn/archiver/tid-120474.html
7,http://bbs.违规广告.com/archiver/tid-26270.html
8,http://oracle.**.com/exploiture/720104_3.html
9,http://www.33kuai.cn/html/shujuku/20080126/5314_2.html
10,http://www.xrss.cn/Dev/DataBase/20084218963.Html
评:
转自http://sandish.itpub.net/post/4899/464369
众所周知,使用 like 进行模糊查询速度极差,包括 like 'AAA%' ,like '%AAA',like '%AAA%',like '%A%A%'以及采用“_”进行单字符匹配的那些模糊查询。网上有很多文章讲到如何提高like查询,提到 like 'AAA%'能够使用到索引,而like '%AAA' ,使用创建反向函数的索引来提高查询效率。但一般情况下,是无法约定客户端采用哪种like查询,难道说把所有的这些情况都进行if判断吗?
为这个事情脑袋疼了无数次。最近,一客户“无理”要求对用户地址模糊查询速度太慢。在数十万的用户记录下查询,要求5秒之内必须查询到记录。
想破脑袋还是找不到方法。有同事找了本Lucene的书给我看,说是能解决。翻来覆去的看了2,3遍,始终想不出这玩意儿怎么用。
突然想到oracle也有全文索引一说,以前只是别人提起过这个词。与网上朋友一聊,说是似乎可以解决,但他忘了怎么用了。
半夜12点,赶紧爬起来,到google上查资料。还真有两下子,研究了几个小时,有所获。第二天白天没时间研究,晚上继续,最终把全文索引搞定,解决了模糊查询速度慢的问题,在数十万条用户数据中, 对用户地址进行模糊查询速度在2秒以内就能够查到。
-------------------------------------------------------------------------
以下是创建全文索引的方法(网上有文章提到使用图形化界面,我用图形化界面创建全文索引,创建了一个晚上,第二天起床居然还没完。但用SQL命令15分钟左右就搞定):
对cmng_custominfo 表中的address字段做全文检索:
1,在oracle9201中需要创建一个分词的东西:
BEGIN
ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');
--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用
end;
2,创建全文检索:
CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');
3,查询时候,使用:
select * from cmng_custominfo where contains (address, '金色新城')>1;
自己测试,发现select * from cmng_custominfo where contains (address, '%金色新城%')>1;才能实现模糊查询,并且使用了索引,数据库版本为oracle9.0.1.1.1
4,需要定期进行同步和优化:
同步:根据新增记录的文本内容更新全文搜索的索引。
begin
ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');
end;
优化:根据被删除记录清除全文搜索索引中的垃圾
begin
ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');
end;
5,采用job做步骤4中的工作:
1)该功能需要利用oracle的JOB功能来完成
因为oracle9I默认不启用JOB功能,所以首先需要增加ORACLE数据库实例的JOB配置参数:
job_queue_processes=5
重新启动oracle数据库服务和listener服务。
2)同步 和 优化
--同步 sync:
variable jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');', SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;
--优化
variable jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');
commit;
END;
其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,可以根据应用的需要而定
6,索引重建
重建索引会删除原来的索引,重新生成索引,需要较长的时间。
重建索引语法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:
Oracle 的全文检索建立和维护索引要比ms sql server都要快得多,笔者的65万记录的一个表建立索引只需要20分钟,同步一次只需要1分钟。
因此,也可以考虑用job的办法定期重建索引。
参考资料:
1,http://blog.csdn.net/yurenjia/archive/2007/04/08/1556306.aspx
2,http://topic.csdn.net/u/20080117/23/34004f4a-4989-47ef-8764-0b7e3bf737a7.html
3,http://tenwe.com/tech/database/oracle/200702/content_561_4.shtml
4,http://www.knowsky.com/389357.html
5,http://yangtingkun.itpub.net/post/468/195520
6,http://bbs.zdnet.com.cn/archiver/tid-120474.html
7,http://bbs.违规广告.com/archiver/tid-26270.html
8,http://oracle.**.com/exploiture/720104_3.html
9,http://www.33kuai.cn/html/shujuku/20080126/5314_2.html
10,http://www.xrss.cn/Dev/DataBase/20084218963.Html
发表评论
-
BeanCopier系列之一:特性测试
2018-06-12 12:15 435源:http://czj4451.iteye.com/ ... -
Lombok 之 ToString
2018-03-20 19:35 654源:http://himichaelchu.iteye.com ... -
extends和super的区别
2018-01-14 19:05 590源:http://bbs.csdn.net/topics/38 ... -
double转BigDecimal,数变大
2017-09-09 14:02 616源:http://blog.csdn.net/linbrain ... -
循环依赖检测方法 spring源码方法
2016-07-06 18:58 1169场景:checkForAliasCircle(name, al ... -
理解和正确使用Java中的断言(assert)
2016-03-24 15:55 1080源:http://blog.csdn.net/leic ... -
string stringbuffer stringbuilder区别
2016-03-07 15:39 455string 是不可变类,内部数据结构为final char数 ... -
接口和抽象类有什么区别
2015-11-27 15:58 435源:http://m.blog.csdn.net/bl ... -
Java中Enum类型的序列化
2015-11-25 14:57 1235源:http://mysun.iteye.com/blog/1 ... -
serialVersionUID的作用
2015-11-08 15:27 580源:http://www.cnblogs.com/gu ... -
dom4j写xml时&会被转义成&的解决方法?
2015-09-08 20:52 992源:http://www.iteye.com/problems ... -
java ImageIO处理图像的封装
2015-09-06 10:17 367源:http://blog.csdn.net/hu_sheng ... -
XML 和 java对象相互转换
2015-08-17 16:45 0源:http://hbiao68.iteye.com/blog ... -
java 版本更迭
2015-08-03 10:19 603源:https://en.wikipedia.org/wiki ... -
谈抽象类与接口的区别之一
2015-04-23 11:46 538源:http://wenku.baidu.com/li ... -
Java基本数据类型
2015-04-17 14:57 683源:http://blog.csdn.net/zuolongs ... -
JAVA深复制(深克隆)与浅复制(浅克隆)
2015-04-17 14:23 434源:http://www.cnblogs.com/yxnchi ... -
java中的四种访问权限是?
2015-04-16 17:58 543源:http://zhidao.baidu.com/link? ... -
DMA Direct Memory Access(存储器直接访问)
2015-04-02 15:55 564源:http://baike.baidu.com/li ... -
HmacMD5 调通 java与ios端
2015-04-02 15:53 929见 github代码 https://github.com/m ...
相关推荐
"Oracle数据库中文全文索引" Oracle数据库中文全文索引是Oracle数据库的一种功能强大的文本检索技术,通过使用Oracle Text,使Oracle9i具备了强大的文本检索能力和智能化的文本管理能力。Oracle Text是Oracle9i采用...
Oracle拼音首字母查询是一种在Oracle数据库中实现对汉字进行拼音首字母检索的技术。在中文环境中,为了方便用户根据汉字的拼音首字母进行快速查找,这种查询方式尤其有用。Oracle数据库虽然原生支持英文字符集,但...
2. **使用全文索引**:对于复杂的模糊查询,全文索引是一个更好的选择。它能够提供更高效的搜索,尤其是对于长文本字段。在支持全文索引的数据库系统(如SQL Server或MySQL)中,可以创建全文索引并利用全文搜索功能...
9. **监控和诊断**: Oracle提供工具和视图(如`V$CTXSTATS`、`DBA_TEXT_INDEXES`)来监控全文索引的性能和健康状况,及时发现并解决问题。 10. **安全和权限**: 确保正确配置权限,限制对敏感数据的访问。可以使用...
测试结果详细分析了全文检索的查全率(即找到相关信息的能力)和查询速度,为实际应用提供了参考。 全文检索性能的研究对于数据库管理员和开发者来说具有重要意义,它能帮助优化查询策略,提高系统性能,特别是在...
### Oracle全文检索技术详解 #### 一、Oracle Text 概述 Oracle Text 是 Oracle 数据库的一项强大特性,它使得 Oracle9i 及后续版本具备了先进的文本检索与智能化管理功能。这一特性最早在 Oracle8 之前的版本中被...
在实际应用中,例如,对Word文档集合的全文检索,可以先将Word文件的路径存储在数据库中,然后使用Oracle Text的全文索引功能对这些文件进行索引。当用户发起搜索请求时,系统会通过索引查询数据库,返回匹配的文档...
在实际使用中,Oracle全文检索支持多种查询语法,包括简单的关键词查询、布尔运算符(AND、OR、NOT)、短语查询(使用引号括起来的词组)以及模糊匹配(通过通配符*和?实现)。此外,还可以使用RANK函数来根据相关性...
Oracle Text提供了多种索引类型,可以根据实际需求选择合适的索引策略,以提高索引效率和检索速度。 3. **权限控制**:由于不同的中间件可能有不同的用户管理和权限控制机制,文章中提出的方案通过集成处理,解决了...
3. **创建索引**:使用Oracle Text提供的工具或PL/SQL程序包创建全文索引。这通常涉及到定义索引首选项,如语言设置、停用词等。 4. **查询和管理**:一旦索引建立,就可以通过标准SQL查询语句来执行全文检索。此外...
通过综合分析V$视图,可以诊断并解决Oracle数据库中的性能问题,如锁争用、I/O瓶颈、内存不足等。 总结来说,Oracle优化涉及SQL优化、索引策略和性能监控等多个方面。理解并掌握这些技术,可以有效地提升Oracle...
首先,Oracle Text 从 Oracle 7 版本开始引入,起初称为 Oracle ConText Cartridge,在 Oracle 8/8i 时期演变为 Oracle interMedia,直至 Oracle 9i 正式被命名为 Oracle Text。Oracle Text 支持多种语言,包括但不...
在Oracle数据库中,LIKE操作符是用于模糊查询的关键字之一。它允许用户通过模式匹配的方式检索数据,从而增加了查询的灵活性。然而,这种灵活性也带来了性能上的挑战,尤其是在处理大规模数据集时。因此,了解如何...
传统上,当数据库中的文本字段采用LIKE操作进行模糊匹配时,由于无法利用索引加速查询过程,系统的响应速度和资源消耗会显著增加,特别是在处理大量文本数据时,这种效率问题尤为突出。因此,全文索引技术应运而生,...
通过上述步骤,我们可以看到 Oracle Text 提供了一套完整的全文检索解决方案,从安装配置到实际应用都非常便捷。它不仅能够处理数据库内的文本数据,还能对存储在文件系统中的文档进行检索,极大地扩展了数据检索的...
- SQL全字段全文索引:CoreSeek能够直接从MySQL等数据库中抽取数据进行索引,简化了数据同步过程。 - 更丰富的查询语法:CoreSeek扩展了Sphinx的查询语法,例如支持SQL-like查询,使得开发者更容易上手。 3. ...
Oracle Knowledge Management Implementation Guide Release 11i 是一份官方文档,主要针对Oracle企业级应用套件11i(E-Business Suite 11i)中的知识管理模块提供了详细的实施指南。Oracle E-Business Suite 11i 是...
SQL调优步骤包括分析慢查询日志、调整语句结构、使用EXPLAIN分析执行计划和根据情况优化索引。 MySQL支持多种存储引擎,如ISAM、MyISAM、InnoDB、Memory、NDBCluster、ARCHIVE、CSV等,其中InnoDB是最常用的一种,...
如果需要模糊匹配,考虑使用全文索引或正则表达式,但效率可能较低。 7. **避免在`WHERE`子句中使用参数**:动态SQL可能导致全表扫描,因为优化器无法预知参数值。可以使用`WITH(INDEX)`来强制使用特定索引。 8. *...