为什么要修改MySQL的ft_min_word_len?
从MySQL 4.0开始就支持全文索引功能,但是 MySQL 默认的最小索引长度是 4,如下:
1 2 3 4 5 6 7 |
mysql> show variables like 'ft_min_word_len'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | ft_min_word_len | 4 | +-----------------+-------+ 1 row in set (0.00 sec) |
如果是英文默认值是比较合理的,但是中文绝大部分词都是2个字符,这就导致小于4个字的词都不能被索引,全文索引功能就形同虚设了。很多情况下都会忽视这个问题。
为什么要用全文索引呢?
一般的数据 库搜索 都是用的SQL的like语句,like语句是不能利用索引的,每次查询都是从第一条遍历至最后一条,查询效率极其低下。一般数据超过10万或者在线人数过多,like查询都会导致数据库崩溃。这也就是为什么很多程序都只提供标题搜索的原因了,因为如果搜索内容,那就更慢了,几万数据就跑不动了。
MySQL全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索效率高,能够支持百万级的数据检索。
如何设置这个参数?
这个变量是一个静态变量,只能修改配置文件,然后重启服务器了,参数设置如下:
1 |
ft_min_word_len = 1 |
另外,还需要注意的是,修改完之后需要重新建立全文索引。
目前MySQL只能提供简单的全文索引,还无法做一些更高级的,如分词等功能。如果需要一些高级的搜索功能或者搜索速度要求很高的业务场景可以使用elasticsearch或sphinx。