MySQL Like模糊查询速度太慢如何解决

 更新时间:2020年10月14日 15:17:09   作者:贾树丙  
这篇文章主要介绍了MySQL Like模糊查询速度太慢如何解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

问题:明明建立了索引,为何Like模糊查询速度还是特别慢?

Like是否使用索引?

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

  2、like keyword% 索引有效。

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

  使用mysql的explain简单测试如下:

  explain select * from company_info where cname like '%小%'

  explain select * from company_info where cname like '小%'

Oracle like '%...%'优化

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

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

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

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

  select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%' ; --走全表扫描,速度慢
  select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0 ; --只查找字段,速度快

MySQL中的INSTR(与Oracle中的不一样)

  INSTR(str,substr)

    返回字符串str串中substr子串第一个出现的位置。这与LOCATE()的双参数形式是一样的,不同的是参数的顺序是相反的。

  INSTR(字段名, 字符串)

    这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始)

    SELECT * FROM tblTopic ORDER BY INSTR( topicTitle, 'ha' ) > 0 DESC
    SELECT INSTR( topicTitle, 'ha' ) FROM tblTopic

  后来又尝试将查询一张表的sql语句,拆成好几个sql,在服务器中同时运行,最后在合并结果。奈何道行太浅,这个实现也没那么好。

  还尝试建立全文索引,数据库居然不让这么干

  最终是需求方妥协,采用 Like keyword% 的格式使用索引    

  对于Like模糊查询的解决方案,若有大神赐教,不吝感激!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步Last_IO_Errno:1236错误解决方法

    最近遇到Mysql主从同步的Last_IO_Errno:1236错误问题,然后在网上查找相关解决方案,这里分享给大家,供参考。
    2017-10-10
  • CentOS7中安装MySQL的图文讲解

    CentOS7中安装MySQL的图文讲解

    这篇文章主要介绍了CentOS7中安装MySQL的图文讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • MySQL命令行下如何执行.sql脚本

    MySQL命令行下如何执行.sql脚本

    这篇文章主要介绍了MySQL命令行下如何执行.sql脚本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MySQL实时监控工具orztop的使用介绍

    MySQL实时监控工具orztop的使用介绍

    这篇文章主要给大家介绍了MySQL实时监控工具orztop的使用,文中给出了详细的介绍,相信对大家的学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Mysql连接本地报错:1130-host ... is not allowed to connect to this MySQL server解决

    Mysql连接本地报错:1130-host ... is not allowed to connect t

    这篇文章主要给大家介绍了关于Mysql连接本地报错:1130-host ... is not allowed to connect to this MySQL server的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • mysql中is null语句的用法分享

    mysql中is null语句的用法分享

    对null的特殊处理即是在前面的章节中,为了决定哪个动物不再是活着的,使用death is not null而不使用death != null的原 因
    2011-05-05
  • CentOS下重启Mysql的各种方法(推荐)

    CentOS下重启Mysql的各种方法(推荐)

    这篇文章主要介绍了CentOS下重启Mysql的各种方法(推荐),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • MySQL提升大量数据查询效率的优化神器

    MySQL提升大量数据查询效率的优化神器

    这篇文章主要介绍了MySQL提升大量数据查询效率的优化神器,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • MySQL 覆盖索引的优点

    MySQL 覆盖索引的优点

    当索引包含了所有查询的数据时,这个索引就称之为覆盖索引。覆盖索引能够成为一个非常有力的工具并且能够显著改善性能,本文将具体讲述覆盖索引的优点
    2021-05-05
  • Mysql巧用join优化sql的方法详解

    Mysql巧用join优化sql的方法详解

    这篇文章主要给大家介绍了关于Mysql巧用join优化sql的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08

最新评论