1. 使用like的遇到的问题

1.1 索引使用问题

在使用Mysql的时候经常遇到一个搜索功能

like '%xxx%'

这种情况下是不会使用索引的,如果like要使用索引必须是

like 'xx%'
1.2 匹配问题

like匹配字符串必须是全匹配,否则无法检索数据

比如

like "%helloworld%" 

只能匹配"helloworld",中间有空格就无法匹配。

2. 全文索引(FULLTEXT)

1. FULLTEXT 索引只能用于 InnoDB 及 MyISAM 表,可以应用于 CHAR,VARCHAR,TEXT 字段
2. 提供了内置的支持 CJK (中文,日文,韩文)的 ngram 分词器

创建全文索引的方法:

ALTER TABLE `users` ADD FULLTEXT INDEX `idx_username` (`username`)  WITH PARSER ngram;

插入语句

INSERT INTO`users` (`id`, `username`, `password`, `sex`) VALUES ('1', 'hello world vilay', '', '0');

查询

SELECT * FROM users where match(username) against('hell' IN BOOLEAN MODE); //可以匹配
SELECT * FROM users where match(username) against('hell vilay' IN BOOLEAN MODE); //可以匹配
SELECT * FROM users where match(username) against('h' IN BOOLEAN MODE); //无法匹配

中文单个字符及英文单个字母,默认是不需要进行检索的,所以匹配不到数据

模式:

IN NATURAL LANGUAGE MODE //自然语言模式 默认
IN BOOLEAN MODE  //布尔模式,会根据匹配排序

多列索引

ALTER TABLE `users` ADD FULLTEXT INDEX `idx_username_nickname` (`username`, `nickname`) WITH PARSER ngram;