FULLTEXT和FULLTEXT KEY / INDEX有什么区别?

时间:2015-03-10 11:45:04

标签: mysql full-text-indexing

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是用户定义的名称,而不是字段名称。

  • 他们之间有什么区别?
  • 系统本身和开发人员是否有任何后果?

我无法在文档中找到任何线索:

2 个答案:

答案 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形式可能是个好主意,因为提醒读者注意索引。

indexkey是同义词

请注意,indexkey之间没有区别(请参阅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;

<强>参考