MyBatis中Like语句使用方式及解决索引失效
知识点:mybatis使用#和$区别,mybatis使用concat,使用bind。使用like如何优化,使索引不失效。知识点就这些,也没有必要再写一遍,我从网上把知识点具体使用的“轮子”拷贝过来,但正确性未验证,请注意甄别。
1 mybatis中如何使用like(未验证,摘抄自 链接 )
-
oracle数据库:
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like CONCAT('%',#{name},'%')
-
或
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like '%'||#{name}||'%'
-
SQLServer数据库:
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like '%'+#{name}+'%'
-
mysql数据库:
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like CONCAT('%',#{name},'%')
-
DB2数据库:
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like CONCAT('%',#{name},'%')
-
或
-
SELECT
-
*
-
FROM
-
user
-
WHERE
-
name like '%'||#{name}||'%'
2 like模糊查询索引失效
哪些场景索引失效?
-
1. like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。
-
2. like keyword% 索引有效。
-
3. like %keyword% 索引失效,也无法使用反向索引。
解决方法:1 Select主键 2 覆盖索引法 3 全文索引法(全文索引,只对MyISAM引擎有用。主要是针对对文件,文本的检索。) 4 使用全文检索引擎工具包 (摘自 链接 。我以前用过覆盖索引和主键索引,其他两种未用过)
**我博客所有文章目录:http://blog.csdn.net/wabiaozia
3 补充
mybatis中使用bind代替concat(摘自刘增辉 mybatis从入门到精通)