Creating FULLTEXT Indexes for Full-Text Search

摘要在本教程中,您将学习如何定义全文索引以在 MySQL 中执行各种全文搜索。

在对表的列执行全文搜索之前,必须为其数据建立索引。每当列的数据发生变化时,MySQL都会重新创建全文索引。在 MySQL 中,全文索引是一种名为FULLTEXT索引

MySQL 支持为启用全文搜索的列自动索引和重新索引数据。 MySQL 5.6 或更高版本允许您为 MyISAM 和 InnoDB 表类型中数据类型为CHARVARCHARTEXT的列定义全文索引。

请注意,MySQL 从 5.6 版本开始仅支持 InnoDB 表的全文索引。

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

使用CREATE TABLE语句创建FULLTEXT索引

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

CREATE TABLE table_name(
    column_list,
    ...,
    FULLTEXT (column1,column2,..)
);Code language: SQL (Structured Query Language) (sql)

要创建FULLTEXT索引,请将逗号分隔的列名称列表放在FULLTEXT关键字后面的括号中。

以下语句创建一个名为posts的新表,该表具有包含post_content列的FULLTEXT索引。

CREATE TABLE posts (
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  body TEXT,
  PRIMARY KEY (id),
  FULLTEXT KEY (body )
);Code language: SQL (Structured Query Language) (sql)

使用ALTER TABLE语句创建FULLTEXT索引

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

ALTER TABLE table_name  
ADD FULLTEXT(column_name1, column_name2,…)Code language: SQL (Structured Query Language) (sql)

在这个语法中,

  • 首先,在ALTER TABLE关键字后指定要创建索引的表的名称。
  • 其次,使用ADD FULLTEXT子句为表的一列或多列定义FULLTEXT索引。

例如,您可以为示例数据库products表中的productDescriptionproductLine列定义FULLTEXT索引,如下所示:

ALTER TABLE products  
ADD FULLTEXT(productDescription,productLine)Code language: SQL (Structured Query Language) (sql)

使用CREATE INDEX语句创建FULLTEXT索引

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

CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)Code language: SQL (Structured Query Language) (sql)

例如,以下语句为offices表的addressLine1addressLine2列创建FULLTEXT索引:

CREATE FULLTEXT INDEX address
ON offices(addressLine1,addressLine2)Code language: SQL (Structured Query Language) (sql)

请注意,对于有很多行的表,先将数据加载到没有FULLTEXT索引的表中,然后再创建FULLTEXT索引,比将大量数据加载到已有FULLTEXT索引的表中要快。

删除FULLTEXT索引

要删除FULLTEXT索引,请使用ALTER TABLE DROP INDEX语句。

ALTER TABLE table_name
DROP INDEX index_name;Code language: SQL (Structured Query Language) (sql)

例如,以下语句从offices表中删除address索引:

ALTER TABLE offices
DROP INDEX address;Code language: SQL (Structured Query Language) (sql)

在本教程中,您向您展示了如何在 MySQL 中创建支持全文搜索的FULLTEXT索引。

本教程有帮助吗?