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;