您的位置:首页 > 数据库 > MySQL

mysql like模糊查询like %someTitle%效率低下

2016-07-30 16:44 447 查看


mysql like模糊查询提高效率的奇葩方法!不知道有没有人这么干过?

一张表大概40万左右的数据,用like模糊查询title字段,很慢,title字段已经建立了索引,mysql 对 someTitle% 这样的模糊查询在有索引的前提下是很快的。

所以下面这两台sql语句差别就很大了 

$sql1 = "...... title like someTitle%" (话费0.001秒)

$sql2 = "...... title like %someTitle%" (话费0.8秒)

这两句的效率相差了800倍,这很可观啊。

所以我有个想法:在不用分词的方法的前提下,把存储的title字段,加一个特别的前缀,比如"im_prefix",比如一条记录的title="我是标题党",那么存储的时候就存储为"im_prefix我是标题党"。

这样一来,我们要模糊查找"标题党"这个关键词的时候,就把sql写成这样:
$sql1 = "...... title like im_prefix%标题党%" (花费0.001秒),前台显示数据的时候,自然把取到的title过滤掉"im_prefix"这个前缀了。

mysql 高效模糊查询
代替like

查询效率比如果: table.field like '%AAA%' 可以改为 locate ('AAA' , table.field) > 0

 
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
mysql> select LOCATE('bar', 'foobarbar'); -> 4 mysql> select LOCATE('xbar', 'foobar'); -> 0
该函数是多字节可靠的。

返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
mysql> select LOCATE('bar', 'foobarbar',5); -> 7
这函数是多字节可靠的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: