纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

MySQL Like模糊查询速度太慢怎样解决

贾树丙   2020-10-14 我要评论

问题:明明建立了索引为何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模糊查询的解决方案若有大神赐教不吝感激!


相关文章

猜您喜欢

  • 图解JVM内存模型

    本文着重讲解了JVM内存模型的相关资料有助于更直观的学习和测试Java虚拟机感兴趣的朋友可以了解详细..
  • 怎样基于Autowired对构造函数进行注释

    本文着重讲解了怎样基于Autowired对构造函数进行注释,文中通过代码实例讲解的非常细致对大家的工作和学习具有一定的参考学习价值,欢迎大家阅读和收藏..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式