今天有同学问题,搜索ip的时候怎样能把
select ip from tabelx where ip like '%192.168.0.1%'
这种句子的性能优化。
的确,使用 like %x 的方式,数据库没办法使用索引,一定会进行整表扫描,所以我们需要避免这种方法。之前同事叫我尝试一下用 match() against 的方法。于是顺便试了试,
——前提:全文索引只支持MyISAM表
select * from `data`.`test` where match (ip) against('')
这样搜索出来没有结果。google了一会儿,发现网上的例子都是搜索英文单词的,于是在ip里面混了点英文单词试了一下,有结果。
再google后发现,mysql默认对全文检索有单词的字符限制,即:
ft_max_word_len 84
ft_min_word_len 4
所以这里的ip没法搜索,因为用 . 分隔的会被当成是一个单词,ip只有3位。
于是把ft_min_word_len修改为1,重启mysqld服务,修复表,重建索引,搜索成功。
这里并不是支持这样搜索ip,ip搜索一般把IP地址存成 UNSIGNED INT,然后用转换函数进行搜索,参考:http://coolshell.cn/articles/1846.html
下面是关于全文检索的一些介绍:
---to be continue