mysql全文索引创建及其使用
全文索引概念
通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。
你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。
你可能没有注意过全文索引,不过至少应该对一种全文索引技术比较熟悉:各种的搜索引擎。虽然搜索引擎的索引对象是超大量的数据,并且通常其背后都不是关系型数据库,不过全文索引的基本原理是一样的。
创建一个表添加全文索引
CREATE TABLE test1(
id INT PRIMARY key,
name VARCHAR(20)
)
ALTER TABLE test1 ADD FULLTEXT KEY idx_name(name) WITH PARSER ngram
INSERT INTO test1 VALUES(1,‘工地城工 有城’),(2,‘adasdasda’),(3,‘阿斯加德黄金时刻’),
(4,‘sajdkja哈哈’),(5,‘d大家啊’),(6,‘nimen你们’)
使用全文索引
和常用的模糊匹配使用 like + % 不同,全文索引有自己的语法格式,使用 match 和 against 关键字,比如
SELECT *
FROM test1
WHERE MATCH(NAME)AGAINST(‘你们’)
SELECT *
FROM test1
WHERE MATCH(NAME)AGAINST(‘有城’)