MySQL文档提供了这种格式来创建FULLTEXT索引:
| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name](index_col_name,...) [index_option]
要使用MySQL实现全文搜索,您可以通过编写
来创建索引CREATE TABLE posts (
id int(4) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
content text,
PRIMARY KEY (id),
FULLTEXT (title, content)
) ENGINE=MyISAM;
OR
CREATE TABLE posts (
id int(4) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL,
content text,
PRIMARY KEY (id),
FULLTEXT KEY my_index_name (title, content)
) ENGINE=MyISAM;
my_index_name
是用户定义的名称,而不是字段名称。
我无法在文档中找到任何线索:
答案 0 :(得分:3)
没有区别,如果你使用第一种语法,那么mysql将选择索引的名称,在大多数情况下选择column name
,因为你有2 FULLTEXT (title, content)
它最有可能选择索引名称为title
在第二种情况下,您明确提供了一个名称。
您可以在创建表后运行命令show create table posts
,并查看两种情况下的索引名称。
答案 1 :(得分:1)
省略索引名称
如果添加索引/键 对于表,MySQL将在指定的列(列集)上存储其他信息,以加快搜索速度。
在您的第一个示例中,MySQL将生成索引并为其命名
my_index_name
。如果省略名称,MySQL将为您选择一个。我找不到关于如何选择名称的文档,但根据我的经验,第一列的名称通常被重用为索引名称。
对于本部分讨论,fulltext
选项无关紧要。它只定义了您要创建的索引/键的类型:
您可以创建特殊的FULLTEXT索引,用于全文搜索。
省略index/key
关键字
只需提供fulltext
:
| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name](index_col_name,...) [index_option] ...
但是使用fulltext index
形式可能是个好主意,因为提醒读者注意索引。
index
和key
是同义词
请注意,index
和key
之间没有区别(请参阅create table):
KEY通常是INDEX的同义词。当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY。这是为了与其他数据库系统兼容而实现的。
示例强>
use test;
create table u (
id int primary key,
a varchar(10),
b varchar(10),
fulltext index (a, b)
);
show index from u;
将打印(我已从此输出中省略了主索引以及一些 附加栏目:
table key_name seq_in_index column_name
u a 1 a
u a 2 b
例如,如果要删除它,则需要索引名称:
alter table u
drop index a;
<强>参考强>