`
楚若之夜
  • 浏览: 120844 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

oracle模糊查询效率提高

 
阅读更多

分2种思路考虑模糊查询的效率的提高。--注:专注处理百万级数据量,小量数据就算了

第一种:把数据存到业务内存中,通过查询内存提高效率。(要求:硬件内存要高)

1,如果想实现内存动态数据,可以监控表数据变化更新内存。

 

第二种:提高oracle数据库的查询方式。

1、使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低。

    例如:select count(*) from lui_user_base t where t.user_name like '%cs%';

2、like '...%'和 like'%...'虽然走了索引,但是效率依然很低。

3、有人说使用如下sql,他的效率提高了10倍,但是数据量小的时候

    select count(*) from lui_user_base where rowid in (
       select rowid from lui_user_base t where t.user_name like '%cs%'
    )

我拿100w跳数据做了测试,效果一般,依然很慢,原因:

  select rowid from lui_user_base t where t.user_name like '%cs%'   这条sql执行很快,那是相当的快,

   但是放到select count(*) from lui_user_base where rowid in()里后,效率就会变的很慢了。

4、select count(*) from lui_user_base t where instr(t.user_name,'cs')> 0

这种查询效果很好,速度很快,推荐使用这种。因为我对oracle内部机制不是很懂,只是对结果做了一个说明。。。惭愧啊。。。。

 

5、有人说了用全文索引,我看了,步骤挺麻烦,但是是个不错的方法,留着备用:

http://sandish.itpub.net/post/4899/464369

对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;

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.51cto.com/archiver/tid-26270.html
8,http://oracle.chinaitlab.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

 
 
 
 
 
分享到:
评论

相关推荐

    oracle的sql优化

     对字段进行函数转换,或者前模糊查询都会导致无法应用索引而进行全表扫描  对Oracle共享池和缓冲区中的Sql必须要大小写都完全用上才能够匹配上 2.顺序问题  Oracle按照从右到左的顺序对数据表进行解析。因此From...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。 其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等...

    根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)

    即可弹出选择数据库表的对话框,这里将列出数据库中所有的表,并支持模糊查询(不区分大小写) 查找需要的表,在复选框中选中需要的表,点确认选择即可。 2、解决Oracle一次转换的表过多时出现超出打开游标的最大数...

    SQLserver数据库管理系统需求分析.doc

    学生成绩管理系统是应对学生人数增多、信息量增大的问题,实现管 理的现代化、网络化,逐步摆脱当前学生成绩管理系统的人工管理方式,提高成绩管理 效率而开发的。希望该程序能够解决学生信息存储、学生成绩查询、...

    SQLserver数据库管理系统需求分析(1).doc

    学生成绩管理系统是应对学生人数增多、信息量增大的问题,实现管 理的现代化、网络化,逐步摆脱当前学生成绩管理系统的人工管理方式,提高成绩管理 效率而开发的。希望该程序能够解决学生信息存储、学生成绩查询、...

    java面试800题

    提高查询速度 Q0029 主外键有什么关系? 外键是从某个表的一个字段指向另外一个表的主健字段,两个字段的类型和精度应该一致,外键的值必须在主键中存在 Q0030 在数据库中什么代表一条记录? 主健 Q0031 如何编写...

    根据表结构生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第8版)

    2、新增字符串格式化工具,提高工作效率的利器。 3、移除XML字符串拼接工具,将该功能整合到了字符串格式化工具中。 4、调整字段设置界面,更方便使用。 5、修正使用自定义注释时生成JavaBean注释不对的Bug。 6...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例113 深克隆效率的比较 141 实例114 transient关键字的应用 143 5.7 接口和内部类 145 实例115 使用sort()方法排序 145 实例116 简化compareTo()方法的重写 146 实例117 策略模式的简单应用 148 实例118 适配器...

    JEECG快速开发平台 v4.0

    2、采用面向声明的开发模式,基于泛型编写极少代码即可实现复杂的数据展示、数据编辑、表单处理等功能,再配合Online Coding在线开发与代码生成器的使用,将J2EE的开发效率提高8倍以上,可以将代码减少90%以上。...

    JEECG快速开发平台-其他

    table+ElementUI等基础架构2、采用面向声明的开发模式,基于泛型编写极少代码即可实现复杂的数据展示、数据编辑、表单处理等功能,再配合Online Coding在线开发与代码生成器的使用,将J2EE的开发效率提高8倍以上,...

    SDL Passolo 2011 合作版 SP9 (11.9.0.53) 已注册中文版

    模糊匹配技术能搜索相似和精确匹配的文本,从而提高了翻译人员的工作效率,缩短了翻译周期。 软件的本地化是一个庞大工程中的一部分,很多专家参与其中,一般情况下,他们可能会使用不同的工具。而 Passolo 能够与...

Global site tag (gtag.js) - Google Analytics