没法使用索引了,开头是不肯定的,MySQL也没法进行优化了,只能扫描表了。php
若是业务须要%就放开头咱们也没办法,通常状况需求都是这样的,毕竟优化仍是为业务服务的。mysql
建立复合索引idx_name_agesql
select name,age from tb where name like '%e%';函数
查询是覆盖索引的,起码比全表扫描要好。优化
若是须要更多字段的数据而不仅仅是age的话,能够进行两次查询,第一次经过name来获取id(这一步是索引扫描),第二步拿获取来的数据在进行id匹配查询(这一步效率很高,ref或者const)。spa
LIKE语句
SELECT `column` FROM `table` where `condition` like `%keyword%'
事实上,可使用 locate(position) 和 instr 这两个函数来代替.net
1、LOCATE语句
SELECT `column` from `table` where locate(‘keyword’, `condition`)>0
2、或是 locate 的別名 position
POSITION语句
SELECT `column` from `table` where position(‘keyword’ IN `condition`)
3、INSTR语句
SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0
locate、position 和 instr 的差別只是参数的位置不一样,同时locate 多一个起始位置的参数外,二者是同样的。
mysql> SELECT LOCATE(‘bar’, ‘foobarbar’,5);
---------------------
做者:wpfphp
来源:CSDN
原文:https://blog.csdn.net/wpfphp/article/details/52584232
版权声明:本文为博主原创文章,转载请附上博文连接!blog