程序员社区

MySQL系列教程 --- 41、如何在 MySQL 中删除索引

MySQL 允许 DROP INDEX 语句从表中删除现有索引。要从表中删除索引,我们可以使用以下查询:

mysql>DROP INDEX index_name ON table_name [algorithm_option | lock_option];  

如果我们要删除一个索引,需要做两件事:

  • 首先,我们必须指定要删除的索引的名称。
  • 其次,您的索引所属的表的名称。

Drop Index 语法包含两个可选选项,分别是 Algorithm 和 Lock,用于在索引修改期间读写表。让我们详细解释两者:

算法选项

algorithm_option 使我们能够指定用于删除表中索引的特定算法。algorithm_option的语法如下:

Algorithm [=] {DEFAULT | INPLACE | COPY}  

Drop Index 语法主要支持两种算法,即 INPLACE 和 COPY。

COPY:该算法允许我们将一个表逐行复制到另一个新表中,然后在这个新表上执行 DROP Index 语句。在这个表上,我们不能执行 INSERT 和 UPDATE 语句来进行数据操作。

INPLACE:该算法允许我们重建表而不是复制原始表。我们可以在这张表上执行所有的数据操作操作。在这个表上,MySQL在索引删除期间发出一个独占元数据锁。

注意:如果没有定义 algorithm 子句,MySQL 使用 INPLACE 算法。如果不支持 INPLACE,则使用 COPY 算法。DEFAULT 算法的工作原理与在 Drop index 语句中不使用任何算法子句的情况相同。

锁定选项

该子句使我们能够在索引删除期间控制并发读写的级别。lock_option的语法如下:

LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}  

在语法中,我们可以看到 lock_option 包含四种模式,DEFAULT、NONE、SHARED 和 EXCLUSIVE。现在,我们将详细讨论所有模式:

SHARED:此模式仅支持并发读取,不支持并发写入。当不支持并发读取时,会报错。

DEFAULT:此模式可以具有指定算法的最大并发级别。如果支持,它将启用并发读取和写入,否则强制执行独占模式。

NONE:如果支持此模式,则您具有并发读写。否则,它会出错。

EXCLUSIVE:此模式强制执行独占访问。

例子

首先,执行以下命令以显示表中可用的索引。

mysql> SHOW INDEXES FROM student;  

它将给出以下输出。

file

在输出中,我们可以看到有三个索引可用。现在,执行以下语句从表student 中删除索引。

mysql> DROP INDEX age ON student ALGORITHM = INPLACE LOCK = DEFAULT;  

再次执行 SHOW INDEXES 语句以验证索引是否已删除。执行此语句后,我们将得到以下输出,其中只有两个索引可用。

file

使用算法和锁的示例

以下语句使用算法和锁定选项从学生表中删除年龄索引。

mysql> DROP INDEX age ON student ALGORITHM = INPLACE LOCK = DEFAULT;  

MySQL 删除 PRIMARY 键索引

在某些情况下,该表包含一个 PRIMARY 索引,每当您使用主键或唯一键创建表时都会创建该索引。在这种情况下,我们需要执行以下命令,因为 PRIMARY 是保留字。

mysql> DROP INDEX PRIMARY ON table_name;  

要从 student 表中删除主键索引,请执行以下语句:

mysql> DROP INDEX PRIMARY ON student;  
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 41、如何在 MySQL 中删除索引

一个分享Java & Python知识的社区