普通LIKE

  1. 一般情况下like模糊查询的写法为(field已建立索引):
  2. SELECT column FROM table WHERE field like '%keyword%'

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

  1. SELECT column FROM table WHERE field like 'keyword%'

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

LOCATE函数

LOCATE('substr',str,pos)
在MYSQL中,我们会遇到在某个字符串中查找指定的某个或几个字符,一般情况下,我们可以通过LIKE模糊查询来实现查找过程,,本文主要测试了LOCATE函数的用法。

LOCATE(substr,str)
该函数表示返回字符串 str中子字符串substr的第一个出现位置;如若substr 不在str中,则返回值为0。
LOCATE(substr,str,pos)
该函数表示返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。

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

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

POSITION函数

POSITION(substr IN str)
该函数表示返回字符串 str中子字符串substr的第一个出现位置;如若substr 不在str中,则返回值为0。
position可以看做是locate的别名,功能跟locate一样

  1. SELECT column FROM table WHERE POSITION('keyword' IN filed)

INSTR函数

INSTR(str,substr)
该函数表示返回字符串 str中子字符串substr的第一个出现位置;如若substr 不在str中,则返回值为0。这和LOCATE()的双参数形式相同,只是参数的顺序被颠

  1. SELECT `column` FROM `table` WHERE INSTR(`field`, 'keyword' )>0

FIND_IN_SET

除了上述的方法外,还有一个函数FIND_IN_SET FIND_IN_SET(str1,str2)
返回str2中str1所在的位置索引,其中str2必须以”,”分割开。

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