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模糊查询效率提高的更多相关文章

  1. Oracle 模糊查询方法

           在这个信息量剧增的时代,怎样帮助用户从海量数据中检索到想要的数据.模糊查询是不可缺少的. 那么在Oracle中模糊查询是怎样实现的呢?   一.我们能够在where子句中使用likeke ...

  2. Oracle 模糊查询 优化

    模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段  like '%关键字%'   字段包含"关键字"的记录   即使在目标字段建立索引也不会走索引,速度最慢 (2 ...

  3. Oracle模糊查询CONCAT参数个数无效

    在使用MyBatis操作Oracle数据库的时候,写模糊查询突然发现原本在MySql中正确的代码,在Oracle中报错,参数个数无效 <if test="empId!=null and ...

  4. oracle模糊查询mysql的区别

    https://blog.csdn.net/weixin_38673554/article/details/86503982#_1 oracle与使用mysql的区别 https://www.cnbl ...

  5. oracle模糊查询效率可这样提高

    1.使用两边加'%'号的查询,oracle是不通过索引的,所以查询效率很低. 例如:select count(*) from lui_user_base t where t.user_name lik ...

  6. oracle 模糊查询中的转义字符用法

    drop view aaa; create view aaa as select '_BCDE' A FROM DUAL UNION ALL SELECT 'ABCDE' FROM DUAL UNIO ...

  7. Oracle模糊查询

    通配符 % 匹配零个或更多的任意字符 _ 匹配一个任意字符 [ ] 匹配指定范围中的一个字符([a-z],[0-9]) [^ ]      不属于指定范围,不包含其中的字符 escape转义 --查询 ...

  8. oracle模糊查询提高效率的方法

    转载:https://blog.csdn.net/weixiaohuai/article/details/83513957 https://blog.csdn.net/chihen/article/d ...

  9. LinqToEntity模糊查询的方法选择

    LinqToEntity针对oracle模糊查询 方法:Contains() 转换出来的sql是  like  关键字 方法:IndexOf()  转换出来的sql是  instr()  函数 lik ...

随机推荐

  1. ELK安装配置及nginx日志分析

    一.ELK简介1.组成ELK是Elasticsearch.Logstash.Kibana三个开源软件的组合.在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名 ...

  2. 动态规划(树形DP):LNOI 2016 侦察守卫

    Sample Input 12 2 8 9 12 6 1 1 5 1 4 8 10 6 10 1 2 3 5 6 7 8 9 10 11 1 3 2 3 3 4 4 5 4 6 4 7 7 8 8 9 ...

  3. EXT 组件一些属性与方法(Tree)

    1.Ext.tree.TreePanel 主要配置项: root:树的根节点. rootVisible:是否显示根节点,默认为true. useArrows:是否在树中使用Vista样式箭头,默认为f ...

  4. js怎样生成json的数据

    var row1 = {};row1.name = 'david';row1.age = '20'; //或者var row2 = {name: 'peter', age: '23'}; var da ...

  5. nyoj 37回文串

    述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可 ...

  6. HTML5 简单画图,切片,变形

    本人是在校学生,由于这段时间不知道怎么回事,心情比较无聊没有事干,所以利用这段时间学一下HTML5,发博客的目的是为了以后可以查询,也希望各位大神能够指导像我们这样的菜鸟,告别菜鸟的时段 我学东西时候 ...

  7. Day 3 @ RSA Conference Asia Pacific & Japan 2016 (morning)

    09.00 – 09.45 hrs Tracks Cloud, Mobile, & IoT Security    A New Security Paradigm for IoT (Inter ...

  8. KVM虚拟化技术

    KVM虚拟化技术 Qemu-kvm kvm virt-manager VNC Qemu-kvm创建和管理虚拟机 一.KVM简介 KVM(名称来自英语:Kernel-basedVirtual Machi ...

  9. javascript字符串基本方法

    1)auchor anchor() 方法用于创建 HTML 锚. var txt="Hello world!" document.write(txt.anchor("my ...

  10. 李炎恢bootstarp_项目实战__瓢城企业(注释+源码)

    源代码下载地址:http://pan.baidu.com/s/1gfI9Pj9 /********************************* pc界面设备页面***************** ...