在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就显得很重要!

一般情况下like模糊查询的写法为(field已建立索引):

SELECT `column` FROM `table` WHERE `field` like '%keyword%';

上面的语句用explain解释来看,SQL语句并未用到索引,而且是全表搜索,如果在数据量超大的时候,可想而知最后的效率会是这样

对比下面的写法:

SELECT `column` FROM `table` WHERE `field` like 'keyword%'; 

这样的写法用explain解释看到,SQL语句使用了索引,搜索的效率大大的提高了!

但是有的时候,我们在做模糊查询的时候,并非要想查询的关键词都在开头,所以如果不是特别的要求,"keywork%"并不合适所有的模糊查询

可以考虑用其他的方法

1.LOCATE('substr',str,pos)方法
SELECT LOCATE('xbar',`foobar`);   返回0
SELECT LOCATE('bar',`foobarbar`);  返回4
SELECT LOCATE('bar',`foobarbar`,**5**); 返回7

备注:返回 substr 在 str 中第一次出现的位置,如果 substr 在 str 中不存在,返回值为 0 。如果pos存在,返回 substr 在 str 第pos个位置后第一次出现的位置,如果 substr 在 str 中不存在,返回值为0。

SELECT `column` FROM `table` WHERE LOCATE('keyword', `field`)>0 

备注:keyword是要搜索的内容,field为被匹配的字段,查询出所有存在keyword的数据

2.POSITION('substr' IN field)方法

position可以看做是locate的别名,功能跟locate一样

SELECT `column` FROM `table` WHERE POSITION('keyword' IN `filed`)
3.INSTR(str,'substr')方法
SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0
还有一个函数FIND_IN_SET

FIND_IN_SET(str1,str2):

返回str2中str1所在的位置索引,其中str2必须以","分割开。

SELECT * FROM `person` WHERE FIND_IN_SET('apply',`name`);

mysql 优化 - like模糊查询优化相关推荐

  1. MySQL优化器_MySQL查询优化器

    MySQL优化器 MySQL架构图 讲到MySQL,就绕不开他的架构图.MySQL是一个经典的C/S架构.服务器这边分两层:第一层是Server层,第二层是存储引擎.Server层处理主要的业务操作流 ...

  2. 最左前缀 mysql优化器_mysql查询优化之索引类型、最左前缀

    一.什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里 ...

  3. 「mysql优化专题」你们要的多表查询优化来啦!请查收(4)

    上一篇讲的是单表查询的优化,(本文末有链接).当然,对数据表的多表查询也是必不可少的.本篇内容主要讲解多表联合查询的优化 一.多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有 ...

  4. mysql大表联合查询优化,大事务优化,规避事务超时,锁等待超时与锁表

    背景:最近在做项目的同时做了一些优化,主要针对mysql大表(2亿+数据量未分库分表情况下)的联合查询以及生产上出现的一些事务超时和锁等待超时现象的优化,分享一些我个人的优化思路,只讲思路不贴代码哈. ...

  5. MySQL优化系列9-MySQL控制查询优化器Hints

    备注:测试数据库版本为MySQL 8.0 文章目录 一.控制查询计划评估 二. 可切换的优化 三. 优化器的Hints 3.1 优化器Hints概述 3.2 优化器Hints语法 3.3 连接顺序优化 ...

  6. MySQL索引系列--索引的优化--LIKE模糊查询

    原文网址:MySQL索引系列--索引的优化--LIKE模糊查询_IT利刃出鞘的博客-CSDN博客 简介         本文介绍MySQL的LIKE模糊查询索引的优化.主要是索引失效的解决方案. 索引 ...

  7. oracle怎么优化模糊查询性能,ORACLE模糊查询优化浅谈

    模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段  like '%关键字%'   字段包含"关键字"的记录   即使在目标字段建立索引也不会走索引,速度最慢   ...

  8. MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术

    目录 一.子查询优化 二.视图重写 三.等价谓词重写 四.条件化简(条件优化技术) 1.条件下推 2.条件化简 五.外连接消除.嵌套连接消除.连接消除 六.数据库的约束规则与语义优化 七.非SPJ优化 ...

  9. mysql 优化器算法_SQL 查询优化器底层原理解析【MySQL 篇】

    前言 SQL 执行流程中有一个模块叫做查询优化器,这个模块的功能主要是对 SQL 语法树进行逻辑优化和物理优化,最终生成执行计划交给执行引擎执行 SQL. 查询优化器主要分为两部分:一部分是逻辑优化, ...

最新文章

  1. 详细理解JS中的继承
  2. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | InMemoryDexClassLoader 类加载器脱壳点总结 )
  3. HDU 5703 Desert 水题 找规律
  4. 停止了IIS服务为什么apache还是启动不了呢?
  5. h3c交换机配置远程管理_H3C S3100交换机配置VLAN和远程管理
  6. Intel Skylake (Server) 架构/微架构/流水线 (5) - 非时效存储
  7. CMDB整体项目梳理(1)
  8. input file 上传图片时,文件格式限制
  9. JAVA动态加载JAR包执行程序
  10. windows配置phpredis
  11. android 浏览器抓包工具下载,WebSee app下载-WebSee抓包工具v1.2.1 安卓版-腾牛安卓网...
  12. 在线作图|在线做完整的Lefse分析
  13. h5 调取前置摄像头
  14. 设置windows开机隐藏启动,隐藏欢迎界面
  15. (二十四)资本资产定价模型
  16. 高权重淘宝标题关键词优化原理解析
  17. 来看看你的时间都去哪儿了
  18. 基于opencv库对图像进行平移,旋转以及翻转
  19. java 打印佛祖保佑
  20. 利用计算机实现音乐节拍的实时自动跟踪,音乐节拍实时跟踪系统的研究及应用...

热门文章

  1. django项目基础
  2. [SAP ABAP开发技术总结]ABAP调优——Open SQL优化
  3. An internal error occurred during: Android Library Update.
  4. clone oracle ebs
  5. 自助出版风靡美国的7个理由(转载)
  6. 无线共存:利用蓝牙和 WiFi 性能特性实现芯片间提权
  7. 微软警告:Office 已遭IE RCE 新0day 攻击
  8. 点击复制,兼容ios-safari
  9. ArcGIS API for Silverlight开发入门(2):一个基础地图实例
  10. Leetcode题目:Reverse String