关闭

Mysql模糊查询like效率,以及更高效的写法

标签: sqlmysql数据库优化
6708人阅读 评论(1) 收藏 举报
分类:


在使用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`);

 
0
1
查看评论
发表评论
* 以上用户言论只代表其个人钱柜娱乐开户,不代表CSDN网站的钱柜娱乐开户或立场

Mysql模糊查询like效率,以及更高效的写法

在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就...
  • luojishan1
  • luojishan1
  • 2017-06-21 12:44
  • 6708

大数据量中的模糊查询优化方案

对工作单使用 like模糊查询时,实际上 数据库内部索引无法使用 ,需要逐条比较查询内容,效率比较低在数据量很多情况下, 提供模糊查询性能,我们可以使用lucene全文索引库技术。本文示例是在SSH框...
  • sdksdk0
  • sdksdk0
  • 2016-09-19 22:21
  • 3656

Mysql模糊查询like效率,以及更高效的写法 在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时

Mysql模糊查询like效率,以及更高效的写法 在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百...
  • forest_fire
  • forest_fire
  • 2017-06-23 09:59
  • 1251

Mysql模糊查询like效率,以及更高效的写法

在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来。这个时候查询的效率就...
  • liuxinyang666
  • liuxinyang666
  • 2018-01-02 23:36
  • 77

iBatis 中 Like 的写法实现模糊查询

iBatis 开发指南告诉我们,当 Person 对象的 name 属性不为 null 时启用 name 查询条件在映射文件 person.xml 中的配置为 select id...
  • CNPJX
  • CNPJX
  • 2011-08-15 09:05
  • 9453

Mysql| 使用通配符进行模糊查询(like,%,_)

通配符的分类: %百分号通配符: 表示任何字符出现任意次数(可以是0次). _下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符.like操作符: LIKE作用是指示mysql后面...
  • u011479200
  • u011479200
  • 2017-11-12 18:39
  • 156

MySQL如何实现不使用like完成模糊查询

SQL like ?一般情况下的模糊查询都是:select * from xxxtable where xxxname like %**%; 本文介绍了SQL like子句的另一种实现方法(速...
  • GCH6969
  • GCH6969
  • 2017-12-28 14:06
  • 84

MySQL模糊查询:LIKE模式和REGEXP模式

转自:http://www.linuxidc.com/Linux/2015-03/114580.htm MySQL模糊查询提供了两种模式:LIKE模式和REGEXP模式。 LIKE模式 ...
  • dhtx_wzgl
  • dhtx_wzgl
  • 2015-11-18 13:38
  • 566

MySql模糊查询like通配符使用详细介绍

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。 一、SQL模式 SQL的模式匹配允许你使用“_”匹配任何单个字符...
  • sonta
  • sonta
  • 2013-05-10 15:16
  • 461

MySql模糊查询like通配符的使用

MySql模糊查询like通配符使用详细介绍 ------------------------------------------------------ %代表任意多...
  • HackAge4619
  • HackAge4619
  • 2017-03-02 11:28
  • 278
    个人资料
    • 访问:13045次
    • 积分:214
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:27篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论