MySQL 删除索引
在 MySQL 数据库中,您可以使用 DROP INDEX 从表中删除已有的索引。
有时候,您可能因为以下一些原因想要从一个表中删除一个或多个索引:
- 创建了错误的索引
- 为了更快,在插入或更新大量的数据之前先删除索引
MySQL 允许您使用 DROP INDEX 从表中删除已有的索引。
MySQL DROP INDEX 语句语法
您应该按照如下的语法使用 DROP INDEX 从一个表中删除一个索引:
DROP INDEX index_name
ON table_name
[algorithm_option | lock_option];
在这个语法中:
-
index_name是索引的名字。 -
table_name是表的名字。 -
algorithm_option指定删除索引的算法。它使用以下的语法:ALGORITHM [=] {DEFAULT | INPLACE | COPY}ALGORITHM子句是可选的。默认为INPLACE。如果不支持INPLACE,则使用COPY。使用
DEFAULT和省略ALGORITHM子句效果相同。以下是对各个算法的说明:
COPY:对原表的副本进行操作,将原表中的表数据逐行复制到新表中。不允许并发 DML。INPLACE: 操作避免复制表数据,但可能会就地重建表。在操作的准备和执行阶段,可能会短暂地对表进行独占元数据锁定。通常,支持并发 DML。
-
lock_option指定删除索引的并发控制策略。它使用以下的语法:LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}LOCK子句是可选的。以下是对各个并发策略的说明:DEFAULT- 给定
ALGORITHM子句(如果有)和ALTER TABLE操作的最大并发级别:如果支持,则允许并发读取和写入。如果不是,则允许并发读取(如果支持)。如果不是,则强制执行独占访问。 NONE- 如果支持,允许并发读取和写入。否则,会发生错误。
SHARED- 如果支持,允许并发读取但阻止写入。即使存储引擎支持给定
ALGORITHM子句(如果有)和ALTER TABLE操作的并发写入,写入也会被阻止。如果不支持并发读取,则会发生错误。 EXCLUSIVE- 强制执行独占访问。即使存储引擎支持给定
ALGORITHM子句(如果有)和ALTER TABLE操作的并发读/写,也会这样做。
在 MySQL 内部,DROP INDEX 语句被映射为 ALTER TABLE ... DROP INDEX ... 语句。
MySQL DROP INDEX 实例
在 MySQL 创建索引教程中,我们在 Sakila 示例数据库中的 actor 表创建了一个索引 first_name。
现在,我们将使用下面的语句将它删除:
DROP INDEX first_name ON actor;
要查看索引是否删除成功,请使用以下 SHOW INDEXES 语句显示表 actor 的索引,例如:
SHOW INDEXES FROM actor;
这是输出:
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| actor | 0 | PRIMARY | 1 | actor_id | A | 201 | NULL | NULL | | BTREE | | | YES | NULL |
| actor | 1 | idx_actor_last_name | 1 | last_name | A | 122 | NULL | NULL | | BTREE | | | YES | NULL |
+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+MySQL 删除主键索引
在 MySQL 中,主键的索引名字固定为 PRIMARY。要删除表 t 上的主键索引,请使用下面的语句:
DROP INDEX `PRIMARY` ON t;
结论
在 MySQL 中, 您可以使用 DROP INDEX 为从表中删除指定的索引。