实际项目中经常会有一个字段存储多个值用逗号分隔的场景,当分开查询的时候,使用模糊查询会非常影响效率。mysql提供了全文检索函数可以有效解决这一问题:
1.数据结构
ID | CODE | MSG |
---|---|---|
1 | 1111111,2222222,3333333 | 数据一 |
2 | 4444444,5555555 | 数据二 |
2.创建Full Text类型索引
当我们要以CODE为条件使用全文检索查询的时候,首先要给CODE字段创建Full Text类型索引:
create fulltext index index_CODE on table(CODE)
3.查询语句
比如我们要查询CODE中包含2222222的数据
SELECT * FROM table WHERE MATCH (CODE) AGAINST ('')
4.特殊情况说明
全文检索函数识别分隔符不仅有“,”还有“-”,实际项目中经常会用到一串编码来标识一条数据(比如商城的订单号),编码中就经常出现“-”,这种情况全文检索也会识别成分隔符,比如:
ID | CODE | MSG |
---|---|---|
1 | 111-1111,222-2222,333-3333 | 数据一 |
2 | 444-4444,555-5555 | 数据二 |
解决方案:第一步和第二步不变,查询语句修改为:
SELECT * FROM table WHERE MATCH (CODE) AGAINST ('"222-2222"')