MySQL在使用LIKE进行模糊匹配查询的时候,字段索引会失效,因此在数据量较大的情况下,LIKE查询效率极低,就可以使用全文索引(FullText)进行优化。
全文索引(FullText)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。
MySQL还提供了支持中文、日文和韩文的内置全文解析器ngram。
创建全文索引
创建表时创建索引
CREATE TABLE `articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NULL DEFAULT NULL,
`content` text NULL DEFAULT NULL,
FULLTEXT INDEX `content`(`content`) WITH PARSER `ngram`
) ENGINE = InnoDB;
为现有表添加索引
ALTER TABLE `articles` ADD FULLTEXT INDEX `content`(`content`) WITH PARSER ngram;
删除全文索引
ALTER TABLE `articles` DROP INDEX `content`;
使用全文索引
自然语言全文索引
将搜索字符串解释为自然人类语言(自有文本)中的短语,没有特殊运算符,但双引号(“)除外。
EXPLAIN SELECT * FROM `articles` WHERE MATCH(content) against ('PHP' in NATURAL LANGUAGE mode);
布尔全文索引
使用此修饰符,某些字符在搜索字符串中的单词的开头或结尾处具有特殊含义。在以下查询中, +和-运算符分别表示必须存在或不存在单词才能进行匹配。
EXPLAIN SELECT * FROM `articles` WHERE MATCH(content) against ('PHP' IN BOOLEAN MODE);