引言
在MySQL中,我们经常使用文本搜索功能,比较熟悉的搜索:
(1)使用LIKE关键词,利用通配符匹配文本,如select col1 from table1 where col1 like 'abc%';
(2)使用正则表达式搜索(REGEXP),如select col1 from table1 where col1 regexp '[123]abc';
这两种搜索方式能满足我们大部分的需求,但是,这两种搜索方式也存在几点重要的限制:
- 性能:通配符和正则表达式匹配通常要求MySQL尝试匹配表中的所有的行,因此,随着数据的增加,这些搜索非常耗时。
- 明确控制:这两种搜索方式很难明确控制匹配什么,不匹配什么,如指定一个词必须匹配,另一个词必须不匹配。
- 智能化的结果:通配符搜索和正则表达式匹配仅能返回满足匹配条件的行,但是每个结果的匹配程度等不能体现。
因此,要解决这些问题,我们就需要用到全文本搜索。
在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行。这样,MySQL可以快速有效的决定哪些词匹配,哪些词不匹配,以及他们匹配的频率,等等。
一、使用全文本搜索
使用全文本搜索时,必须要索引被搜索的列,而且要随着数据的改变不断重新索引,不过不用担心,我们对表列进行设计后,MySQL会自动进行索引和重新索引。
1.启用全文本搜索
在创建表的时候,通过指定FULLTEXT列来启用全文本搜索。如:
create table table1
(
id int not null auto_increment,
name char(20) not null,
dates datetime not null,
texts text null