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
这函数是多字节可靠的。
相关文章推荐
- 操作MySQL报出: Duplicate key or integrity constraint violation message from server 问题解决
- MySQL数据库远程访问权限打开
- 操作MySQL数据库报出:Parameter index out of range (1 > number of parameters, which is
- mysql索引优化续
- 插入随机数到MySQL数据库
- mysql -- 查看mysql正在执行的SQL语句
- MySQL-运算符和函数
- MySQL版emp员工信息表
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- 《MySQL 5.7 Replication新特性》分享之互动问题解答
- mysql配置文件生效测试
- MySQL常用函数
- MySQL按照汉字的拼音排序
- mysql下表的修复与优化
- mysql error
- Ubuntu更改MySQL字符集UTF-8,正确显示中文
- MySQL 遇到的问题
- Mysql优化之开山篇
- mysql binlog 相关命令
- mysql 通过bin-log恢复数据方法详解