栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

like模糊查询,及其优化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

like模糊查询,及其优化

目前sql有四种匹配模糊查询模式 % _ [] [^]

% 任意长度

表示任意0-n个字符,可匹配任意类型和长度

// sql
select * from table where name like '%三%';
// mybatis
.... where name like concat('%',#{name},'%');
_ 单个

表示任意单个字符----用来限长的

// sql
select * from table where name like '_三_';
// mybatis
.... where name like concat('_',#{name},'_');
[] 单个

表示括号内所有列之内的一个

// sql
select * from table where name like '[张李王]三';
// mybatis
.... where name like '[张李王]'#{name};

##[^] 单个
表示不在括号内的字符

// sql
select * from table where name like '[^张李王]三';
// mybatis
.... where name like '[^张李王]'#{name};
模糊查询优化

对于用like查询会有性能问题,且做模糊会让索引失效,从而全表扫描
优化方法有四种

INSTR(‘查询字段’,‘查询条件’)

INSTR(str,substr)
instr(title,‘手册’)>0 相当于 title like ‘%手册%’
instr(title,‘手册’)=1 相当于 title like ‘手册%’
instr(title,‘手册’)=0 相当于 title not like ‘%手册%’

select * from table where INSTR(name, #{keyWords} )
LOCATE(‘查询字段’,‘查询条件’)

LOCATE(substr IN str)

select * from table where LOCATE(#{keyWords} , name )
position( ‘查询条件’ in ‘查询字段’)

POSITION(substr IN str)

select * from table where position(#{keyWords}  in name )
FIND_IN_SET(‘查询字段’,‘查询条件’)

FIND_IN_SET(str,strlist)

select * from table where FIND_IN_SET(name , #{keyWords} )
多个字段进行模糊搜索

INSTR(CONCAt(mui.nickname,yui.nickname),#{query}) > 0

注意
  • mybatis中大于号和小于号都用 > < 代替
  • 使用了模糊查询,就得用id动态sql来排除null的情况
  • sql中用is表示字段未null的值
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/606164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号