Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:密钥id_2做什么?_Mysql_Sql_Indexing_Key - Fatal编程技术网

Mysql SQL:密钥id_2做什么?

Mysql SQL:密钥id_2做什么?,mysql,sql,indexing,key,Mysql,Sql,Indexing,Key,我一直在使用: PRIMARY KEY (id), UNIQUE id (id), KEY id_2 (id) 每当我创建一个表,但我不明白键id\u 2(id)做什么以及为什么 我到处都找遍了,找不到合适的答案。谢谢 从这个问题: 看起来键语法允许您为该键列创建命名索引。id_2是它的名称。正如您将在相关问题中看到的,您可以多次指定: CREATE TABLE `testkey` ( `id` varchar(10) NOT NULL, PRIMARY KEY (`id`), K

我一直在使用:

PRIMARY KEY (id), UNIQUE id (id), KEY id_2 (id)
每当我创建一个表,但我不明白
键id\u 2(id)
做什么以及为什么

我到处都找遍了,找不到合适的答案。谢谢

从这个问题:

看起来
语法允许您为该键列创建命名索引。
id_2
是它的名称。正如您将在相关问题中看到的,您可以多次指定:

CREATE TABLE `testkey` (
  `id` varchar(10) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`),
  KEY `id_2` (`id`)
)

它是索引的名称。您正在id列上创建一个名为id_2的索引

它在
id
列上创建一个名为
id_2
的索引

从声明中:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

create_definition:
    col_name column_definition   | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
      [index_option] ...   | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      [index_option] ...

换句话说,
KEY
INDEX

的同义词基于您的示例,我相信您在一列上创建了三个不同的索引。。。这可能不是你想做的

首先,您要创建一个主键:

PRIMARY KEY (id)
接下来,您将创建一个唯一的索引,这是不必要的,因为您已经有了主键。。。您将此唯一索引命名为
id

UNIQUE id (id)
最后,创建名为
id\u 2
的第三个索引:

KEY id_2 (id)

相反,我认为您应该只创建主键,而放弃其他两个索引。

请注意,如果您有三个索引,则会浪费磁盘空间存储两个多余的索引,并且会减慢更新操作,因为必须更改三个索引,而不是一个索引。所以,你的表现受到了打击,却毫无益处;一个索引就可以完成这项工作。(哦,你正在减慢优化器,如果有任何一个相同的索引,它们都是最有用的,如果它们中任何一个都有用的话)。代码>主键(id)、唯一id(id)、键id_2(id)本身不起任何作用。请发布完整的SQL或上下文。