在本教學中,您將學習如何定義全文索引,以便在MySQL中執行各種全文搜索。
在表的列中執行全文搜索之前,必須對其數據進行索引。 每當列的數據更改時,MySQL將重新創建全文索引。在MySQL中,全文索引是一種名稱為FULLTEXT
的索引。
MySQL支持對全文搜索啟用列自動建立索引和重新索引數據。 MySQL 5.6或更高版本允許您為數據類型為MyISAM
中的CHAR
,VARCHAR
或TEXT
或InnoDB
表類型的列定義全文索引。 請注意,自MySQL5.6版以來,MySQL支持InnoDB
表的全文索引。
MySQL允許您在使用CREATE TABLE語句創建表或為現有表使用ALTER TABLE或CREATE 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
索引,請在FULLTEXT
關鍵字之後的括弧中放置逗號分隔列的列表。
以下語句創建一個名為posts
的新表,該表具有包含post_content
列的FULLTEXT
索引。
CREATE TABLE posts (
id int(4) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
post_content text,
PRIMARY KEY (id),
FULLTEXT KEY post_content (post_content)
);
定義現有表的FULLTEXT索引
如果您想要在一個已存在表上定義全文索引,可以使用ALTER TABLE
語句或CREATE INDEX
語句。
使用ALTER TABLE語句定義FULLTEXT索引
以下語法使用ALTER TABLE
語句定義FULLTEXT
索引:
ALTER TABLE table_name
ADD FULLTEXT(column_name1, column_name2,…)
將table_name
指定為一列或多列定義FULLTEXT
索引的ADD FULLTEXT
子句。
例如,可以在示例資料庫(zaixiandb)的products
表中為productDescription
和productLine
列定義FULLTEXT
索引,如下所示:
ALTER TABLE products
ADD FULLTEXT(productDescription,productLine)
使用CREATE INDEX語句定義FULLTEXT索引
還可以使用CREATE INDEX
語句為現有表創建FULLTEXT
索引。 請參閱以下語法:
CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)
以下語句為offices
表的addressLine1
和addressLine2
列創建一個FULLTEXT
索引。
CREATE FULLTEXT INDEX address
ON offices(addressLine1,addressLine2)
請注意,對於具有多行的表,首先將數據加載到沒有FULLTEXT
索引的表中,然後創建FULLTEXT
索引,而不是將大量數據加載到具有現有FULLTEXT
索引的表中,先加載數據後創建索引速度更快。
刪除全文搜索列
要刪除FULLTEXT
索引,只需使用ALTER TABLE ... DROP INDEX
語句刪除索引。 例如,以下語句刪除了offices
表中名稱為address
的FULLTEXT
索引,可使用以下語句 -
ALTER TABLE offices
DROP INDEX address;
在本教學中,我們向您展示了如何定義和刪除支持MySQL全文搜索的FULLTEXT
索引。