精华内容
下载资源
问答
  • oracle模糊查询效率提高 博客分类:  oracle 数据库 模糊查询 内存 技术札记   分2种思路考虑模糊查询的效率的提高。--注:专注处理百万级数据量,小量数据就算了 第一种:把数据存到业务内存中,通过查询...

    分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的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式: 1.select * from tb where name like '%XX%'; 2.select * from tb where ...


    使用
    Oracleinstr函数与索引配合提高模糊查询的效率

    一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:
    1.select * from tb where name like '%XX%';
    2.select * from tb where instr(name,'XX')>0;

    若是在name字段上没有加索引,两者效率差不多,基本没有区别。

    为提高效率,我们在name字段上可以加上非唯一性索引:
    create index idx_tb_name on tb(name);

    这样,再使用

    select * from tb where instr(name,'XX')>0;

    这样的语句查询,效率可以提高不少,表数据量越大时两者差别越大。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序的影响。

    展开全文
  • Oracle模糊查询的实现 2010-10-29 16:41 佚名 互联网 我要评论(2) 字号:T | T 模糊查询对于每一个数据库来说,都是比较难实现的,下文对Oracle数据库模糊查询的实现方法作了详细的描述,供您参考。 AD:...

    Oracle模糊查询的实现

    2010-10-29 16:41 佚名 互联网   我要评论(2)  字号: T  |   T
    一键收藏,随时查看,分享好友!

    模糊查询对于每一个数据库来说,都是比较难实现的,下文对Oracle数据库模糊查询的实现方法作了详细的描述,供您参考。

    AD:2013云计算架构师峰会精彩课程曝光

    Oracle模糊查询应该如何实现呢?下面就教您一个实现Oracle模糊查询的方法,如果您在Oracle模糊查询方面遇到问题,不妨一看。

    在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很像...”的数据记录,以下是可使用的通配符:
    %   零或者多个字符
    _    单一任何字符(下划线)
    \     特殊字符
    []     在某一范围内的字符,如[0-9]或者[aeth]
    [^]    不在某范围内的字符,如[^0-9]或者[^aeth]

    其中关于条件,SQL提供了四种匹配模式:

    1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

    比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

    将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

    另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
    SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

    若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%' 
    虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

    2,_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

    比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
    只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

    再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
    只找出“三脚猫”这样name为三个字且第一个字是“三”的;

    3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

    比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
    将找出“张三”、“李三”、“王三”(而不是“张李王三”);

    如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
    SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
    将找出“老1”、“老2”、……、“老9”;

    4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

    比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
    将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

    SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
    将排除“老1”到“老4”,寻找“老5”、“老6”、……

    5,查询内容包含通配符时

    由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

       
    1. function sqlencode(str)  
    2. str=replace(str,"[","[[]") '此句一定要在最前  
    3. str=replace(str,"_","[_]")  
    4. str=replace(str,"%","[%]")  
    5. sqlencode=str 
    6. end function 

    在查询前将待查字符串先经该函数处理即可。

    【编辑推荐】

    Oracle存储过程的调试方法

    带您了解Oracle物理结构

    Oracle自动归档模式的设置

    ORACLE归档日志删除方法

    Oracle移动数据文件的方法

    【责任编辑: 段燃  TEL:(010)68476606】

    展开全文
  • 教您如何实现Oracle模糊查询 2010-11-18 16:27 佚名 互联网 我要评论(0) 字号:T | T 查询是数据库的核心功能,而模糊查询是最大的难点,下文对Oracle模糊查询的实现方法作了详尽的阐述,供您参考学习之用...

    教您如何实现Oracle模糊查询

    2010-11-18 16:27 佚名 互联网   我要评论(0)  字号: T  |   T
    一键收藏,随时查看,分享好友!

    查询是数据库的核心功能,而模糊查询是最大的难点,下文对Oracle模糊查询的实现方法作了详尽的阐述,供您参考学习之用。

    AD:2013云计算架构师峰会精彩课程曝光

    Oracle模糊查询应该如何实现呢?这是很多人都提到过的问题,下面就为您详细介绍Oracle模糊查询的实现过程,希望对您能有所启迪。

    我们可以在where子句中使用like来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取那些“很 像...”的数据记录,以下是可使用的通配符:
    %   零或者多个字符
    _    单一任何字符(下划线)
    \     特殊字符
    []     在某一范围内的字符,如[0-9]或者[aeth]  
    [^]    不在某范围内的字符,如[^0-9]或者[^aeth]
    后两种, 需要Oracle 10g以上使用支持like的正则regexp_like。
    其中关于条件,Oralce中SQL语句提供了四种匹配模式:

    1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
    比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
    将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三” 的记录全找出来。
    另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
    SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

    若使用SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
    虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

    2,_:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
    比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
    只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
    再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
    只找出“三脚猫”这样name为三个字且第一个字是“三”的;

    3,[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
    将找出“张三”、“李三”、“王三”(而不是“张李王三”);
    如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
    SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
    将找出“老1”、“老2”、……、“老9”;

    4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    比如SQL Server: SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'    将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;
    Oracle 10g以上的用法为:

    select*fromtablewhereregexp_like(name,'[张李王]三');
    SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
    将排除“老1”到“老4”,寻找“老5”、“老 6”、……
    注:oracle like 不支持正则,你可以使用支持like的正则regexp_like

    5,查询内容包含通配 符时
    由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

    function sqlencode(str)
    str=replace(str,"[","[[]") '此句一定要在最前
    str=replace(str,"_","[_]")
    str=replace(str,"%","[%]")
    sqlencode=str
    end function

    【编辑推荐】

    Oracle分页查询语句的写法

    Oracle条件分支语句示例

    Oracle循环语句的写法

    Oracle修改用户语法介绍

    Oracle默认用户的密码问题

    展开全文
  • 首先讲一下Oracle模糊查询 Oracle模糊查询可使用的 通配符 ,Oralce中SQL语句提供了 四种匹配模式 : % 零或者多个字符 _ 单一任何字符(下划线) \ 特殊字符 [] 在某一范围内的字符,如[0-9]或者[aeth] [^] 不在某...
  • Oracle模糊查询

    2019-10-23 11:23:52
    Oracle模糊查询 文章目录Oracle模糊查询案例1. 查询所有姓张的雇员2. 查询所有年龄为20到30岁之间的雇员3. 查询所有昵称中带有%的雇员案例分析总结 案例 Oracle数据库中存在表格employee,存放了公司雇员信息,表格...
  • oracle模糊查询

    千次阅读 2018-10-19 10:30:05
    oracle模糊查询有以下几种情况: like  使用like关键字做模糊查询时,先考虑是否需要用到索引。如果对模糊查询的列没有用到索引,则可以任意写,写法网上都可以查到,很多,这里就不过多说明;如果对模糊查询的...
  • Oracle 模糊查询方法

    万次阅读 热门讨论 2014-10-12 21:12:36
    一、我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: (1)% :零或者...
  • ORACLE中Like与Instr模糊查询性能大比拼 ORACLE中Like与Instr模糊查询性能大比拼     instr(title,'手册')>0 相当于 title like '%手册%'   instr(title,'手册')=1 相当于 title like '手册%'   instr...
  • Oracle数据库的简单查询 查询语句语法结构: select 列名1,列名2,列名3,… from 表; 在Oracle数据库下有一个employees员工表,有一个department部门表,一下操作均基于这两张表: 主要字段有; Employees:员工表 ...
  • Oracle 模糊查询like用法

    千次阅读 2019-04-10 15:06:19
    一、我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: (1)% :零或者...
  • 模糊匹配 匹配语句:where coloumnvalue(列值) like 字符串 匹配常用方法: 1,字符串中有%表示另外还有零个及以上个字符 如:’%大剧院%’,表示查询该列值中含有’大剧院’的行; 如:’%大%美’,表示查询...
  • oracle模糊查询优化

    2016-11-09 23:13:16
    oracle模糊查询的优化策略  1,%前置会导致不走索引 或者走索引但是不如不走 不如走全文检索  2,优化方案: (1)采取另一种写法: 运用charindex函数 如:select * from table1 where instr('c',...
  • Oracle 模糊查询like %%

    万次阅读 2017-11-03 12:52:52
    一、我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符: (1)% :零或者...
  • 模糊匹配  匹配语句:where coloumnvalue(列值) like 字符串  匹配常用方法:   1,字符串中有%表示另外还有零个及以上个字符   如:’%大剧院%’,表示查询该列值中含有’大剧院’的行;   
  • Mybatis & Oracle模糊查询

    2019-07-24 20:16:17
    方法一:直接使用%拼接字符串 ...方法二:使用concat函数 colName like concat(concat('%',#{paramName}),'%') 方法三:使用mybitis的bind标签 <if test="paramName!= null"> <...
  • Oracle 模糊查询

    千次阅读 2019-01-12 16:48:47
    在Where子句中,可以对datetime、char、varchar字段类型的列用 Like子句配合通配符选取 那些“很像...”的数据记录,以下是可使用的通配符: % 零或者多个字符 ...据此我们写出以下函数
  • Oracle 模糊查询优化

    千次阅读 2013-08-06 19:20:20
    模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段 like '%关键字%'  字段包含"关键字“的记录 即使在目标字段建立索引也不会走索引,速度最慢  (2)字段 like '关键字%' 字段以"关键字...
  • 问题:使用like模糊查询,性能不是很好,寻求更高效的模糊查询的方法 解决:使用oracle自带的instr()函数解决 参考:https://blog.csdn.net/u010028869/article/details/40022547 select * from table where instr...
  • 使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:1.select * from tb where name like '%XX%';2.select * from tb where ...
  • Oracle模糊查询的实现

    千次阅读 2013-04-06 21:59:36
    Oracle模糊查询应该如何实现呢?下面就教您一个实现Oracle模糊查询的方法,如果您在Oracle模糊查询方面遇到问题,不妨一看。 在Where子句中,可以对datetime、char、varchar字段类型的列用Like子句配合通配符选取...
  • Oracle模糊查询时间 select * from 表明 where to_char(列名,'yyyy-mm-dd HH')='2015-10-15 12';
  • oracle 模糊查询

    2013-12-06 16:51:32
    oracle10g以上支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能相似 4,REGEXP_REPLACE :与REPLACE的功能...
  • oracle模糊查询中的regexp_like嵌套子查询用法 regexp_like一般用于模糊查询某一列时包含多个查询条件 需求1:在用户表中查询出账号包含650000和230000的用户。 select * from sys_user where regexp_like(account,'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,223
精华内容 8,489
关键字:

oracle模糊查询函数