博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE模糊查询优化浅谈
阅读量:4100 次
发布时间:2019-05-25

本文共 1026 字,大约阅读时间需要 3 分钟。

模糊查询是数据库查询中经常用到的,一般常用的格式如下:
(1)字段  like '%关键字%'   字段包含"关键字“的记录   即使在目标字段建立索引也不会走索引,速度最慢  
(2)字段  like '关键字%'      字段以"关键字"开始的记录   可以使用到在目标字段建立的升序索引
(3)字段 like '%关键字'      字段以"关键字“结束的记录    可以使用到目标字段建立的降序索引
对于无法使用索引的 '%关键字%' 模式,有没有办法优化呢,答案是肯定的,
在ORacle中提供了instr(strSource,strTarget)函数,比使用'%关键字%'的模式效率高很多。
instr函数说明:
INSTR
  (源字符串, 目标字符串, 起始位置, 匹配序号)
  在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始
  到字符的结尾就结束。
  语法如下:
  instr( string1, string2 [, start_position [, nth_appearance ] ] )
  参数分析:
  string1
  源字符串,要在此字符串中查找。
  string2
  要在string1中查找的字符串.
  start_position
  代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
  nth_appearance
  代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
  注意:
  如果String2在String1中没有找到,instr函数返回0.
  示例:
  SELECT instr('syranmo','s') FROM dual; -- 返回 1
  SELECT instr('syranmo','ra') FROM dual;  -- 返回 3
  1 SELECT instr('syran mo','a',1,2) FROM dual;  -- 返回 0
模糊查询优化:
了解了instr函数的用法,优化就变得简单了,例如 %关键字%   等同于  instr(字段,'关键字')>0 
经过我的简单测试,instr函数比like %关键字% 大概快一倍。

转载地址:http://ohusi.baihongyu.com/

你可能感兴趣的文章
c++11 你需要知道这些就够了
查看>>
c++11 你需要知道这些就够了
查看>>
shared_ptr的一些尴尬
查看>>
C++总结8——shared_ptr和weak_ptr智能指针
查看>>
c++写时拷贝1
查看>>
C++ 写时拷贝 2
查看>>
Linux网络编程---I/O复用模型之poll
查看>>
Java NIO详解
查看>>
单列模式-编写类ConfigManager读取属性文件
查看>>
java中float和double的区别
查看>>
Statement与PreparedStatement区别
查看>>
Tomcat配置数据源步骤以及使用JNDI
查看>>
before start of result set 是什么错误
查看>>
(正则表达式)表单验证
查看>>
在JS中 onclick="save();return false;"return false是
查看>>
JSTL 常用标签总结
查看>>
内容里面带标签,在HTML显示问题,JSTL
查看>>
VS编译器运行后闪退,处理方法
查看>>
用div+css做下拉菜单,当鼠标移向2级菜单时,为什么1级菜单的a:hover背景色就不管用了?
查看>>
idea 有时提示找不到类或者符号
查看>>