MySQL使用like查询使用索引情况及fulltext索引
0
最近有个功能需要使用到模糊查询,当时我也不想使用lucene
来做,所以就像直接使用MySQL的like
查询就可以了。
于是就在这个字段上面建了个索引,但是印象中我记得好像like
查询是不能使用索引的,所以我这里做了个实验,结果如图:
我相信上图已经非常直观的给出答案了,我就不多解释了。
如果需要实现模糊查询怎么办,这时我们需要使用到fulltext
索引,但是需要注意只有MyISAM
这个引擎的MySQL才能支持,而且对中文支持不好,主要是中文分词,因为我这里都是查询的一些标签而且都是用逗号分隔所以查询起来效果还可以,如果是用来文章检索,还是看看有什么插件或者使用其他方法了。
如果使用fulltext
查询不到结果那么可能有以下几个问题:
- 你的数据库引擎不对
- 中文分词
- MySQL有一个设置:
ft_min_word_len
这个是最短的索引字符串,默认为4
,如果查询的字符串小于这个值,也查下不到 - 如果你的关键词频率超过了50%,使用默认的查询方式(自然语言)是查询不到的,需要好似用
IN BOOLEAN MODE
模式才可以查询到
索引更多姿势:http://www.cnblogs.com/lyhabc/p/3776739.html
fulltext
姿势:http://www.cnblogs.com/macula7/archive/2011/05/18/2050525.html
最后的意外:修改ft_min_word_len
的时候,注意ft_min_word_len=1
是放到[mysqld]
后面的不要放到[mysql]
后面哦。
再附加一些小知识:
重建索引:
REPAIR TABLE table_name QUICK;
查询某个表的索引:SHOW INDEX FROM table_name;
本来我想使用Hibernate提供的fulltext
来查询的,不过使用Hibernate来查询fulltext
好像还是要使用到lucene
,文章:http://hibernate.org/search/documentation/getting-started/,所以我还是使用原生态的SQL查询吧。
MySQL有个插件可以支持中文:mysqlcft