返回 登录
0

定义MySQL全文搜索的FULLTEXT索引

在本教程中,将学习如何定义用于在MySQL中执行各种全文搜索的全文索引。

在表的列中执行全文搜索之前,必须为其数据编制创建索引。当列的数据更改时,MySQL将重新编制索引。在MySQL中,全文索引是一种名称为FULLTEXT的索引。

MySQL支持对全文搜索并能启用列自动索引重新索引数据。MySQL版本5.6或更高版本允许为数据类型是MyISAMInnoDB表类型中的CHARVARCHARTEXT的列定义全文索引。请注意,MySQL是从版本5.6开始才支持InnoDB表中的全文索引。

MySQL允许在创建表时使用CREATE TABLE,或ALTER TABLECREATE INDEX语句来定义FULLTEXT索引。

使用CREATE TABLE语句定义FULLTEXT索引

通常,在使用CREATE TABLE语句创建新表时,可以为列定义FULLTEXT索引,如下所示:

CREATE TABLE table_name(
 column1 data_type, 
        column2 data_type,
        column3 data_type,
 …
PRIMARY_KEY(key_column),
FULLTEXT (column1,column2,..)
);

FULLTEXT语句之后的括号中使用逗号分隔列的列表来创建全文索引。
以下语句创建一个新表post,在该表的post_content列上创建FULLTEXT索引。

CREATE TABLE studymysql.post (
  id int(4) NOT NULL AUTO_INCREMENT,
  title varchar(255) NOT NULL,
  post_content text,
  PRIMARY KEY (id),
  FULLTEXT KEY post_content_fulltext_key (post_content)
);

在已存在的表中定义FULLTEXT索引

如果想在已存在的表中定义全文索引,可以使用ALTER TABLE语句或CREATE INDEX语句。

使用ALTER TABLE语句定义FULLTEXT索引

以下使用ALTER TABLE语句定义FULLTEXT索引的语法:

ALTER TABLE  table_name  
ADD FULLTEXT(column_name1, column_name2,…)

这里 table_nameADD FULLTEXT子句,可定义FULLTEXT索引在这个表中的一列或多列上。

例如,可以为studymysql示例数据库product表中的产品名称(product_name)和产品描述(description)列定义FULLTEXT索引,如下所示:

ALTER TABLE product  
ADD FULLTEXT(product_name, description)

使用CREATE INDEX语句定义FULLTEXT索引

还可以使用CREATE INDEX语句为现有表创建FULLTEXT索引。 请参见以下语法:

CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)

以下语句是为office表的addressname列创建FULLTEXT索引。

CREATE FULLTEXT INDEX address
ON offices(office,name)

请注意,对于具有许多行的表,将没有FULLTEXT索引的数据加载到表中最快,其次创建FULLTEXT索引比将具有FULLTEXT索引的大量数据加载到表表中要快一些。

删除全文搜索列

要删除FULLTEXT索引,只需使用ALTER TABLE ... DROP INDEX语句删除索引。 例如,以下语句是删除office表中的address FULLTEXT索引:

ALTER TABLE office
DROP INDEX address

在本教程中,我们展示了如何定义和删除支持MySQL中全文搜索的FULLTEXT索引。

相关教程

评论