MySql模糊查询

常规like的使用限制:

1. like %keyword :索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。

2. like keyword% :索引有效。

3. like %keyword% :索引失效,也无法使用反向索引。


MySql使用内置函数实现模糊查询:

1. 使用locate()方法
1.1.普通用法:

SELECT `column` from `table` where locate('keyword', `condition`)>0
    类似于 java 的 indexOf();不过 locate() 只要找到返回的结果都大于0(即使是查询的内容就是最开始部分),没有查找到才返回0;
1.2. 指定其实位置:
SELECT LOCATE('bar', 'foobarbar',5);  --> 7

    从foobarbar的第五个位置开始查找 


2.使用instr()函数 (据说是locate()的别名函数)

SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0
    唯一不同的是 查询内容的位置不同,见SQL语句中过的keyword


3.使用position()方法

   据说也是locate()方法的别名函数,功能一样 

SELECT `column` from `table` where position(‘keyword’ IN `condition`)
   不过它不再是通过返回值来判断,而是使用关键字in


4.使用find_in_set()函数
   如: find_in_set(str,strlist),strlist必须要是以逗号分隔的字符串
   如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N

SQL> SELECT FIND_IN_SET('b','a,b,c,d');
+---------------------------------------------------------+
| SELECT FIND_IN_SET('b','a,b,c,d')                       |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec) 
总结: locate、position 和 instr 的差別只是参数的位置不同,同时locate 多一个起始位置的参数外,两者是一样的。
find_in_set()是个比较特殊的存在,但它们都是返回要查找的子字符串 在 指定字符串中的位置。速度上前3个比用 like 稍快了一点(不过这四个函数都不能使用索引,这是个遗憾)


查询%xx的记录优化

select count(c.c_ply_no) as COUNT
from Policy_Data_All c, Item_Data_All i
where c.c_ply_no = i.c_ply_no
and i.C_LCN_NO like '%245'
在执行的时候,执行计划显示,消耗值,io值,cpu值均非常大,原因是like后面前模糊查询导致索引失效,进行全表扫描。

解决方法:

    这种只有前模糊的sql可以改造如下写法

select count(c.c_ply_no) as COUNT
from Policy_Data_All c, Item_Data_All i
where c.c_ply_no = i.c_ply_no
and reverse(i.C_LCN_NO) like reverse('%245')
使用翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全扫描。有效降低消耗值,io值,cpu值这三个指标,尤其是io值的降低。



转载于:https://www.cnblogs.com/archermeng/p/7537257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python psycopg2使用_python 操作数据库:psycopg2的使用

1 conn psycopg2.connect(database"testdb", user"postgres",password"cohondob", host"127.0.0.1", port"5432")这个API打开一个连接到PostgreSQL数据库。如果成功打开数据库时,它返回一个连接对象。2cursor c…

软件测试人员棘手的问题,Èí¼þ²âÊԵļ¬ÊÖÎÊÌ⣺ÈçºÎ±ÜÃâÖظ´ÌύȱÏÝ...

¡¡¡¡£££©£¡££¡££££©©£¡¡¡¡¡BUG£££¢¡£££¡££¡£¡£——£…

机器学习实用指南_机器学习方法:实用指南

机器学习实用指南by Karlijn Willems通过Karlijn Willems 机器学习方法:实用指南 (How Machines Learn: A Practical Guide) You may have heard about machine learning from interesting applications like spam filtering, optical character recognition, and …

本地仓库settings.xml中使用阿里的仓库

背景 当前使用eclipse自带的maven碰到两个蛋疼的问题: maven在国内使用如果不进行FQ则会痛苦不堪如便秘。maven下载大量jar包导致某盘不够用,需要换大的分区。因此为了解决这个问题就介绍两个eclipse配置:maven本地路径配置和maven外部路径配…

day6_python之md5加密

#md5是不可逆的,就是没有办法解密的 Python内置哈希库对字符串进行MD5加密的方法-hashlibimport hashlib def my_md5(s,salt): #用函数,为了提高代码的复用率s ssalt #1.必须是字符串news str(s).encode() #2.字符串需要encode编码后&#xff0…

异步服务_微服务全链路异步化实践

1. 背景随着公司业务的发展,核心服务流量越来越大,使用到的资源也越来越多。在微服务架构体系中,大部分的业务是基于Java 语言实现的,受限于Java 的线程实现,一个Java 线程映射到一个kernel 线程,造成了高并…

win7打开计算机死机,怎么样解决Win7系统运行程序引起的死机问题

Win7系统不仅需要使用到电脑中自带的一些程序,同时,也需要在win7旗舰版电脑中有选择的自己去安装一些程序。但是经常有用户会碰到Win7电脑突然跳出运行程序未响应,出现电脑死机的情况,特别是开的浏览器窗口多的时候更是死机的频繁…

(poj)1064 Cable master 二分+精度

题目链接:http://poj.org/problem?id1064 DescriptionInhabitants of the Wonderland have decided to hold a regional programming contest. The Judging Committee has volunteered and has promised to organize the most honest contest ever. It was decided…

PHP中如何解决高并发

PHP中如何解决高并发 1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的。主要影响服务器的速度 有:网络-硬盘读写速度…

es6 迭代器_揭秘ES6迭代器和迭代器

es6 迭代器by Tiago Lopes Ferreira由Tiago Lopes Ferreira 揭秘ES6迭代器和迭代器 (Demystifying ES6 Iterables & Iterators) ES6 introduces a new way to interact with JavaScript data structures — iteration. Let’s demystify it.ES6引入了一种与JavaScript数据…

JS之this与语句分号问题v(**V**)v

1 <script >2 //this知识 单词知识&#xff1a;property&#xff1a;属性 prototype&#xff1a;原型3 //*Q&#xff1a;什么是this&#xff1f;4 //*A&#xff1a;所有函数内部都有一个this&#xff0c;任何函数本质上都是通过某个对象来调用的&#xff0c;…

计算机联系函范文,致客户联络函

致客户联络函 相关内容:收到贵支部所发的“函调证明”通知&#xff0c;很高兴我校毕业生xxx同学能成为贵支部的党员发展对象&#xff0c;现对其在我校上学其间的表现证明如下&#xff1a;xxx&#xff0c;女&#xff0c;xxx年7月28日生&#xff0c;团员&#xff0c;XX年8月——X…

c语言堆栈基本代码入栈出栈_c语言的简单的进栈出栈

这个代码运行时只能输入4个以内的数有输出4个以上就没有输出了求大神看看#include#include#defineStack_Size50typedefstructSeqstack{intelem[Stack_Size];inttop...这个代码运行时只能输入4个以内的数有输出 4个以上就没有输出了 求大神看看 #include #include #define Stack…

P1401 城市(30分,正解网络流)

题目描述 N(2<n<200)个城市&#xff0c;M(1<m<40000)条无向边&#xff0c;你要找T(1<T<200)条从城市1到城市N的路&#xff0c;使得最长的边的长度最小&#xff0c;边不能重复用。 输入输出格式 输入格式&#xff1a; 第1行三个整数N,M,T用空格隔开。 第2行到…

sqlserver游标概念与实例全面解说

引言 我们先不讲游标的什么概念&#xff0c;步骤及语法&#xff0c;先来看一个例子&#xff1a; 表一 OriginSalary 表二 AddSalary 现在有2张表&#xff0c;一张是OriginSalary表--工资表&#xff0c;有三个字段0_ID 员工…

为什么Docker对初创企业有意义

by Charly Vega查理维加(Charly Vega) 为什么Docker对初创企业有意义 (Why Docker makes sense for startups) Docker is becoming the standard to develop and run containerized applications.Docker正在成为开发和运行容器化应用程序的标准。 Long ago, this piece of te…

MyEclipse中Maven Web项目部署路径设置

转载于:https://www.cnblogs.com/langzichanglu/p/10336805.html

小米电视联网后显示无法解析小米电视服务器,小米电视连上无线不能上网怎么回事?教你解决办法...

原标题&#xff1a;小米电视连上无线不能上网怎么回事&#xff1f;教你解决办法互联网电视凭借在线观看影视剧这个独有的优势受到越来越多家庭的喜爱。特别是配置不俗的小米电视&#xff0c;然而随之而来的的问题也让很多用户头疼&#xff0c;比如家里的小米电视突然上不了网了…

配置Server Side TAF

实验环境&#xff1a;Oracle 11.2.0.4 RAC1.为设置TAF在RAC集群上新建服务2.启动server_taf服务3.检查确认服务正在运行4.找到刚创建服务的service_id5.根据service_id审查服务的信息6.给服务添加server side failover参数7.再次审查服务可以看到Method, Type和Retries值8.检查…

fgets阻塞 stdin 退出_来自stdin问题的fgets[c]

我试过你的代码,但无法重现问题。以下代码的工作方式正是您所期望的,它会提示您输入名称,等待您键入名称,然后提示您输入地址,等等。我想知道你是否不需要在提示输入更多信息之前阅读stdin并清空它?typedef struct {char* name;char* address;}employeeRecord;int readrecord(…