MySQL优化之like关键字

1.%号不放最左边

没法使用索引了,开头是不肯定的,MySQL也没法进行优化了,只能扫描表了。php

2.使用覆盖索引

若是业务须要%就放开头咱们也没办法,通常状况需求都是这样的,毕竟优化仍是为业务服务的。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

相关文章
相关标签/搜索