摘要:在本教程中,您将学习如何定义全文索引以在 MySQL 中执行各种全文搜索。
在对表的列执行全文搜索之前,必须为其数据建立索引。每当列的数据发生变化时,MySQL都会重新创建全文索引。在 MySQL 中,全文索引是一种名为FULLTEXT
的索引。
MySQL 支持为启用全文搜索的列自动索引和重新索引数据。 MySQL 5.6 或更高版本允许您为 MyISAM 和 InnoDB 表类型中数据类型为CHAR
、 VARCHAR
或TEXT
的列定义全文索引。
请注意,MySQL 从 5.6 版本开始仅支持 InnoDB 表的全文索引。
MySQL 允许您在创建表时使用CREATE TABLE
语句或为现有表使用ALTER TABLE
或CREATE 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
表中的productDescription
和productLine
列定义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
表的addressLine1
和addressLine2
列创建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
索引。