zoukankan      html  css  js  c++  java
  • 对lIKE语句的优化

    在大表中,进行模糊查询,一般情况下是用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%'

    注:比较mysql中locate函数

  • 相关阅读:
    从汇编的角度看待const与#define
    从汇编的角度看待变量类型与sizeof的机制
    按字节对齐分析
    堆内存和栈内存的探索
    string源码实现分析
    string源码分析 ——转载 http://blogs.360.cn/360cloud/2012/11/26/linux-gcc-stl-string-in-depth/
    开始了
    atoi函数的实现——面试
    new与malloc的区别,以及内存分配浅析
    [C]C语言中EOF是什么意思?
  • 原文地址:https://www.cnblogs.com/prvin/p/2706760.html
Copyright © 2011-2022 走看看