Like关键字,从技术上来说,是一个非常友善的通配符。利用这个通配符,我们可以实现很多模糊查询。如现在在一个人事档案系统中,用户想知道身份证号码以“339005”开头的人事信息,此时,就可以利用Like语句实现。我们可以利用下面的条件语句,实现我们的需求,“where 身份证号码 like ‘339005%’”。通过这个条件语句,可以查到所有身份证以339005开头的号码。
  但是,当用户在一张大表中采用这个LIKE语句的话,就会发现这个查询语句的运行效率非常的慢。这是什么原因造成的呢?其实,不管是Like 关键字,若采用MATCHES关键字的话,若在大量数据中查找符合条件的记录,则其运行效率也比较低。这主要是其技术特性所造成的。
  Like与Matches两个关键字,其支持通配符匹配。在有些专业书籍上把这个叫做“正规表达式”。不过由于在利用这些关键字查询的时候, 数据库系统不是通过索引来查询,而是采用顺序扫描的方式来查询。显然,真是这种技术特性,造成了Like与Mateches两个关键字查询效率的低下。特别是在复杂查询或者大表查询中,用户可以明显感觉到速度比较慢。
  索引是数据库中的一个重要的数据结构。索引如果利用的合理的话,可以大幅度的提升数据库的查询性能。一般情况下,我们在数据库设计的时候,要充分的利用索引,来提高数据库的运行效率。如对于一些经常需要用到的查询功能,我们需要为没有指定外键的列建立索引;如有查询大表数据,而且又需根据好几个字段的值对其进行排序,也需要在这些列上建立复合索引。特别是在一些应用系统上,往往可以按以下字段的名称,就会对这个字段进行排序。遇到这种情况的话,更加需要在这些频繁进行排序的列上建立索引,以提高重新排序的效率。可见,若在查询的时候,若不能利用索引提高查询效率的话,则就好像跑车失去四轮驱动,速度会大受影响。
  所以,在数据库系统设计中,要尽量避免采用Like或者Matche关键字。有时候,我们可以利用其他运算符号来代替。如我们可以利用〉(大于)或者<(小于)符号来达到类似的需求。若真的要采用这两个关键字的话,则就需要做好查询优化方面的工作。如不要在基础表中直接利用这个两个关键字,而是通过报表视图、或者临时表等来查询,以减少其不良影响。
 

Oracle中慎用Like等通配符的更多相关文章

  1. 清除oracle中的缓存(具体细节未知, 慎用)

    oracle中的缓存主要是指SGA中的:1.share pool2.database buffer cache清空命令如下:首先要登录到sqlplus命令下,输入如下命令即可:SQL> alte ...

  2. ORACLE中的支持正则表达式的函数

    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBS ...

  3. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  4. Oracle中正则表达式的使用

    Oracle10开始支持正则表达式. ORACLE中的支持正则表达式的函数主要有下面四个: 1. REGEXP_LIKE :          与LIKE的功能相似 2. REGEXP_INSTR : ...

  5. oracle中imp命令具体解释

    oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件.imp使用的基本格式:imp[username[/pass ...

  6. ORACLE 中的一些特殊符号

    oracle通配符,运算符的使用 用于where比较条件的有: 等于:=.<.<=.>.>=.<> 包含:in.not in exists.not exists 范 ...

  7. Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

    Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...

  8. oracle中生成大批量数据的方法-下

    方法五:使用PLSQL的数据生成器 首先测试环境建立:dept表 CREATE TABLE dept(deptno NUMBER(6),dname VARCHAR2(20),loc VARCHAR2( ...

  9. Oracle中转义下划线

    原意是查询出所有的月粒度模型,但是在oracle中,下划线也代表匹配单一任何字符,导致15分钟粒度的模型也被查询出来,在此,需要对下划线做转义,使其只表示下划线的含义,可以使用ESCAPE()函数. ...

随机推荐

  1. Skype SILK codec overview

    最近简单看了一下Skype SILK codec 算法, 基本原理和流程大体明白了, 以后有时间再仔细研究一下细节,今天就简单说说. SILK Codec是一个语音和音频编解码算法, 对于音频带宽.网 ...

  2. ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586 题目大意就是把一段序列里面的数替换成f(x),然后让总和最大. 首先可以计算出初始的总和,以及每 ...

  3. scrollHeight

    scrollHeight=显示内容高度+隐藏内容高度 参考: https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollHeight ...

  4. CF475D:CGCDSSQ

    浅谈\(RMQ\):https://www.cnblogs.com/AKMer/p/10128219.html 题目传送门:https://codeforces.com/problemset/prob ...

  5. 洛谷【P1358】扑克牌

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...

  6. JVM体系结构之一:总体介绍

    一.Java的内存区域划分 Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. Java的内存区域主要分为五部分: 程序计数器(PC) ...

  7. spring初始化顺序

    首先,Spring bean的默认加载顺序是怎么控制的 工程中有2个bean,A和B,其中必须先初始化A再初始化B,但是没有depend-on或者Order等方式去保证,只不过恰好刚好这么运行着没出事 ...

  8. 问题:MSChart.exe;结果:微软图表控件MsChart使用方法及各种插件下载地址

    微软图表控件MsChart使用方法及各种插件下载地址 (2012-08-10 17:32:33) 转载▼ 标签: 图表 控件 下载地址 kernel32 微软 it 分类: C# 昨天在网上看到了微软 ...

  9. hadoop主节点(NameNode)备份策略以、恢复方法、操作步骤

    一.dits和fsimage      首先要提到两个文件edits和fsimage,下面来说说他们是做什么的. 集群中的名称节点(NameNode)会把文件系统的变化以追加保存到日志文件edits中 ...

  10. CodeForces 492E Vanya and Field (思维题)

    E. Vanya and Field time limit per test 2 seconds memory limit per test 256 megabytes input standard ...