mysql对于模糊查询like的一些汇总


Posted in MySQL onMay 09, 2021

1、常见用法:

(1)搭配%使用

%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:

mysql对于模糊查询like的一些汇总

(2)搭配_使用

_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据:

mysql对于模糊查询like的一些汇总

2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题

(1)尽量少以%或者_开头进行模糊查询

通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

以%或者_开头查询,索引失效

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

(2)使用覆盖索引

当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊查询索引是有效的

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

InnoDB中主键可以不添加进索引中

注意:使用覆盖索引,对于字段的长度是由要求限制的,一般超过长度,索引也会失效

这里如果我查询中带有descripition字段,则覆盖索引也会失效(我这里的数据库经过测试最多只支持255长度的字段)

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

(3)使用全文索引

给字段建立Full Text索引,然后使用match(...) against(...)进行检索

mysql对于模糊查询like的一些汇总

mysql对于模糊查询like的一些汇总

注意:这种全文索引方式只对英文单词起作用,对于中文汉字支持不够友好,需要额外去mysql的配置文件做一些配置修改,让它额外支持中文

(4)使用一些额外的全文搜索引擎来解决

Lucene,solr,elasticsearch等等

基本原理是:把mysql配置文件中的ft_min_word_len=3改为1。(没有这项就直接添加),然后新建一个字段来保持分词结果,给这个字段建立全文索引。然后实现一个分词模块,把词语“大家好”拆分为“大 大家 大家好 家 家好 好”。然后用match .. against 来代替like %%,查询出来的结果跟like的结果基本相同(如果分词合理的话),但是效率比like高至少10倍以上。

总结

到此这篇关于mysql对于模糊查询like的文章就介绍到这了,更多相关mysql模糊查询like内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL infobright的安装步骤
Apr 07 MySQL
详解MySQL InnoDB存储引擎的内存管理
Apr 08 MySQL
Mysql 如何实现多张无关联表查询数据并分页
Jun 05 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
MySQL系列之十 MySQL事务隔离实现并发控制
Jul 02 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
一文弄懂MySQL中redo log与binlog的区别
Feb 15 MySQL
Mysql多层子查询示例代码(收藏夹案例)
Mar 31 MySQL
mysql sock 文件解析及作用讲解
Jul 15 MySQL
MySQL Threads_running飙升与慢查询的相关问题解决
MySQL sql_mode的使用详解
May 08 #MySQL
MySQL 数据丢失排查案例
May 08 #MySQL
MySQL update set 和 and的区别
May 08 #MySQL
MySQL查询学习之基础查询操作
May 08 #MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 #MySQL
一篇文章弄懂MySQL查询语句的执行过程
You might like
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
有关于PHP中常见数据类型的汇总分享
2014/01/06 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP类相关知识点实例总结
2016/09/28 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
浅析javascript的return语句
2015/12/15 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python获取指定时间差的时间实例详解
2017/04/11 Python
深入浅析python with语句简介
2018/04/11 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
Python实现点云投影到平面显示
2020/01/18 Python
sklearn的predict_proba使用说明
2020/06/28 Python
MYSQL基础面试题
2012/05/13 面试题
社会公德演讲稿
2014/05/20 职场文书
文员求职信
2014/07/15 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
SpringBoot接入钉钉自定义机器人预警通知
2022/07/15 Java/Android