Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 5.6使用就地alter table添加/删除相同索引的说明_Mysql_Performance - Fatal编程技术网

关于MySQL 5.6使用就地alter table添加/删除相同索引的说明

关于MySQL 5.6使用就地alter table添加/删除相同索引的说明,mysql,performance,Mysql,Performance,从文档中: 包含DROP INDEX和ADD INDEX的ALTER TABLE语句 为同一索引命名的子句使用表副本,而不是Fast 索引创建 这对我来说有点不清楚。它是在谈论索引的名称吗?有人能举一个MySQL求助于表副本的查询的例子吗?事实上,这一行听起来好像是关于: 一个单独的ALTERTABLE语句 包含DROP INDEX和ADD INDEX子句的 这两个子句命名相同的索引 并声明这样的语句使用表副本,而不是快速创建索引 这种声明将是: ALTER TABLE MyTable DR

从文档中:

包含DROP INDEX和ADD INDEX的ALTER TABLE语句 为同一索引命名的子句使用表副本,而不是Fast 索引创建


这对我来说有点不清楚。它是在谈论索引的名称吗?有人能举一个MySQL求助于表副本的查询的例子吗?

事实上,这一行听起来好像是关于:

一个单独的ALTERTABLE语句 包含DROP INDEX和ADD INDEX子句的 这两个子句命名相同的索引 并声明这样的语句使用表副本,而不是快速创建索引

这种声明将是:

ALTER TABLE MyTable
  DROP INDEX MyIndex
  ADD INDEX MyIndex(MyColumn);
文档并不清楚这背后的原因,但我认为数据库希望先创建一个索引,然后删除另一个索引,这样语句本身就可以更容易地实现原子化。创建索引可能会失败。如果索引名本身也在存储中使用,那么先创建然后删除的顺序会产生冲突


毕竟,快速创建索引是一项相对较新的功能,因此随着时间的推移,他们可能会对此有所改进。

啊,谢谢。我甚至不知道你一开始就可以把它们结合起来。那么是关于索引的名称?如果我有一个索引myindex,它为列my_id编制了索引,那么下面的查询会使用表副本吗?alter table mytable drop index myindex add index anotherindexmy_id,ANOTHER COLUMN;?