在本教學中,您將學習如何定義全文索引,以便在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 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)
);
如果您想要在一個已存在表上定義全文索引,可以使用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
子句。
例如,可以在範例資料庫(yiibaidb)的products
表中為productDescription
和productLine
列定義FULLTEXT
索引,如下所示:
ALTER TABLE products
ADD FULLTEXT(productDescription,productLine)
還可以使用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
索引。