`
晴天雨天
  • 浏览: 14879 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

like %str%优化

阅读更多
Oracle like '%...%' 优化


1。尽量不要使用 like '%%'

2。对于 like '%' (不以 % 开头),Oracle可以应用 colunm上的index

3。对于 like '%…' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '%'

4.非用like'%%'不可时,使用Oracle内部函数:INSTR()解决。



建测试表和Index,注意,重点在于带reverse的function index。同时,一定要使用CBO才行

create table test_like as select object_id,object_name from dba_objects;

-------建立测试表

create index test_like__name on test_like(object_name);

------建立索引

create index test_like__name_reverse on test_like(reverse(object_name));

------建立反向索引

analyze table test_like compute statistics for table for all indexes;

------对表进行分析

都过SQLPLUS连接到数据,一定是SQLPLUS,因为下面有写命令在PLSQL的命令行中不被支持;

set autotrace trace exp

-----设定SQL跟踪

set linesize 2000

-------设定输出宽度



select * from test_like where object_name like 'AS%';

使用了索引

select * from test_like where object_name like '%S';

未使用索引

select * from test_like where reverse(object_name)like reverse('%AS');

使用了索引



4.

在大表中,进行模糊查询,一般情况下是用LIKE'%%',但是这个东西走的是全表扫描,如果在数据量非常大的情况下,效率特别慢,因此,尝试用ORACLE函数INSTR()来解决。

实验步骤如下:

首先构造一张百万行的表。

SQL> insert into emp2 select * from emp2;

1032192 rows inserted

如上所示,构造完成

接下来连续运用多个LIKE查询来模糊匹配

SQL> select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%';

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------

Executed in 1.859 seconds

如上所示,LIKE查询一次,就走一次全表扫描,效率非常慢

同样的效果,现在来换做INSTR函数来执行

SQL> select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------

Executed in 0.063 seconds

看到了吧,,时间上的差异很明显,INSTR在一瞬间执行完成,因为这个是查找的字段,而非走全表扫描

看来,oracle 内部函数效率还是高些。

因此,大家以后碰到同样的问题,除了全文检索外,这个也是个好方式

注意:

    select   id, name from users where instr(id, '101') > 0; 

         等价于

          select   id, name from users where id like '%101%'
分享到:
评论

相关推荐

    likestring简单的相似字符串处理库

    4. **API设计**:库应该提供简洁易用的接口,允许开发者轻松地比较两个或多个字符串的相似度,例如`similarity($str1, $str2)`函数。 5. **性能优化**:为了应对大数据量的字符串处理,库可能采用了缓存机制、哈希...

    SQL SERVER 模糊查询的技巧

    - 如果可能的话,考虑使用全文索引或创建合适的索引来优化模糊查询。 - 当模式中包含特殊字符时,务必确保已进行正确的转义处理。 通过以上介绍,我们可以看到SQL Server提供了非常强大的模糊查询功能,合理利用...

    MySQL Like语句的使用方法

    - `FIND_IN_SET(str, set)`函数用于在一个逗号分隔的字符串列表中查找特定的字符串。例如,`FIND_IN_SET('2', '1,2,3')`会返回2,因为'2'在列表中位于第二个位置。 - 使用`FIND_IN_SET()`需要注意,它对性能的影响...

    php站内搜索、关键字加亮显示

    在PHP开发中,站内搜索(Internal...总的来说,实现PHP站内搜索和关键词加亮显示涉及的关键技术包括数据库查询优化、字符串处理和HTML/CSS的使用。通过不断学习和实践,你可以构建出高效、用户体验良好的站内搜索功能。

    在SQL查询中使用LIKE来代替IN查询的方法

    因为`LIKE`通常不能利用索引来优化查询,而`IN`则可以。因此,这种替代方法更适用于小规模的数据查询,或者在无法直接使用`IN`的情况下。在生产环境中,应根据实际情况权衡选择最适合的查询方式。

    asp 格式化sql中的like字符串

    本文将详细介绍一个ASP函数`formatQueryStr(str)`,该函数用于格式化SQL中的LIKE字符串,确保查询的安全性和准确性。 #### 二、函数详解 ##### 1. 函数定义 ```vbscript function formatQueryStr(str) ``` - **...

    数据库模糊查询

    因此,在设计查询逻辑时应尽量优化查询条件,减少不必要的模糊查询。 2. **安全性**:在处理用户输入时要特别小心,避免SQL注入攻击。可以通过参数化查询等方式提高系统的安全性。 3. **索引问题**:如果在查询中...

    PyInstaller-3.4安装包

    如果你遇到权限问题,可以尝试使用`sudo`(在Unix-like系统中)或以管理员身份运行命令提示符。 **PyInstaller的使用** PyInstaller的基本用法是通过命令行接口运行。例如,如果要将名为`my_script.py`的Python...

    C#适用于like语句的SQL格式化函数

    本文实例讲述了C#适用于like.../// ”str”>要转换的字符串</param> /// 格式化后的字符串</returns> public static string ToLikeSql(string sqlstr)  {  if (sqlstr == null) return “”;  StringBuilder st

    JS调用ASP文件范例

    sqlstr = "select top 5 * from [NB_Content] where Img like '%%http%%' order by id desc" rs.open sqlstr, conn, 1, 3 if not rs.eof then %> <% i = 1 dim str1, str2, str3 while not rs.eof if ...

    ASP处理多关键词查询实例代码

    在Web开发中,尤其是涉及到搜索引擎或者用户输入查询条件时,多关键词查询是一个常见的需求。ASP(Active Server Pages)作为微软的...同时,对于大型数据集,可能需要优化查询策略,如使用索引,以提高查询性能。

    比较不错的asp单表单字段多条件查询

    ### ASP单表单字段多条件查询技术解析 #### 一、引言 在Web开发领域,尤其是使用ASP...当然,在实际应用中,我们还需要考虑更多的因素,比如查询性能优化、更复杂的查询逻辑支持等,以满足更为复杂的应用场景需求。

    数据库访问优化之如何减少数据库服务器CPU运算.pdf

    数据库访问优化之如何减少数据库服务器CPU运算 本文主要介绍了如何减少数据库服务器CPU运算的方法,包括使用绑定变量、合理使用排序、减少比较操作等。文章首先介绍了使用绑定变量的优点,包括防止SQL注入、提高SQL...

    详解Python如何拼接字符串.pdf

    print(str_1 + str_2) ``` 在Python中,短字符串拼接的性能优化在于常量折叠,即在编译阶段将相邻的字面量字符串合并。当拼接的字符串长度小于等于20时,`+`操作符的效率较高。 在实际编程中,选择合适的字符串...

    详解Python如何拼接字符串.docx

    在性能方面,对于短字符串的拼接,由于Python的常数折叠优化,`+`号在最终字符串长度不超过20的情况下可能更快。然而,当需要拼接大量字符串或长字符串时,其他方法如`join()`通常更高效,因为它避免了频繁的对象...

    php通过数组实现多条件查询实现方法(字符串分割)

    $whereSql .= " And (arc.title like '%$keyarr[$index]%' Or arc.keywords like '%$keyarr[$index]%')"; } echo $whereSql; ?> ``` 这段代码的核心在于将用户输入的关键词字符串(例如 "asp php,jsp")转换为一个...

    比较字符串是否相同.rar

    - 在数据库查询中,SQL的`LIKE`和`=`操作符用于比较字符串。 - 正则表达式可以进行更复杂的模式匹配和字符串比较。 总的来说,比较字符串是否相同是编程中的基本操作,理解各种语言和场景下的比较方式是至关重要...

    SQL高级实例-模糊查询-分组随机查询-转换

    日期和时间的处理通常涉及`STR_TO_DATE`、`DATE_FORMAT`等函数,它们允许我们解析日期字符串或按特定格式显示日期。对于XML和JSON,MySQL提供`XML_CONCAT`和`JSON_MERGE_PATCH`等函数,而PostgreSQL有`xmlparse`和`...

    如何统计MySQL数据量大小

    其基本语法为`CONCAT(str1, str2, ..., str_n)`。例如,如果你有两个字段`name`和`surname`,你可以用`CONCAT(name, ' ', surname)`来拼接出完整的姓名。虽然这个函数与数据量统计看似无关,但理解其用法对于处理和...

Global site tag (gtag.js) - Google Analytics