MySQL 删除索引

时间:2019-11-20 08:52:14  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL DROP INDEX语句删除表的现有索引。

MySQL DROP INDEX语句语法

要从表中删除现有索引,请使用DROP INDEX语句,如下所示:

DROP INDEX index_name ON table_name
[algorithm_option | lock_option];

使用以下语法:

  • 首先,在DROP INDEX关键字之后指定要删除的索引的名称。

  • 其次,指定索引所属的表的名称。

算法

algorithm_option允许您指定用于删除索引的特定算法。
下面显示了algorithm_option子句的语法:

ALGORITHM [=] {DEFAULT|INPLACE|COPY}

为了删除索引,支持以下算法:

  • COPY:将表逐行复制到新表中,然后对原始表的副本执行DROP INDEX。
    不允许并发数据操作语句,例如INSERT和UPDATE。

  • INPLACE:将该表重建到位,而不是复制到新表中。
    MySQL在索引删除操作的准备和执行阶段对表发出独占元数据锁。
    该算法允许并发数据操作语句。

注意,ALGORITHM子句是可选的。
如果您跳过它,MySQL将使用INPLACE。
如果INPLACE是不支持的,则MySQL使用COPY。

使用DEFAULT与省略ALGORITHM子句具有相同的效果。

在删除索引时,lock_option控制表上并发读取和写入的级别。

下面显示了lock_option的语法:

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

支持以下锁定模式:

  • 默认值:这使您可以为给定算法获得最大的并发级别。
    首先,如果支持,它允许并发读写。
    如果不支持,则允许并发读取(如果支持)。
    如果不是,请强制执行独占访问。

  • NONE:如果支持NONE,则可以同时进行读写操作。
    否则,MySQL发出错误。

  • 共享:如果支持共享,则可以同时读取,但不能同时写入。
    如果并发读取不支持,MySQL会发出错误。

  • 独占:这将强制执行独占访问。

MySQL DROP INDEX语句示例

让我们为演示创建一个新表:

CREATE TABLE leads(
    lead_id INT AUTO_INCREMENT,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    information_source VARCHAR(255),
    INDEX name(first_name,last_name),
    UNIQUE email(email),
    PRIMARY KEY(lead_id)
);

以下语句从Leads表中删除名称索引:

DROP INDEX name ON leads;

以下语句使用特定算法和锁定从潜在顾客表中删除电子邮件索引:

DROP INDEX email ON leads
ALGORITHM = INPLACE 
LOCK = DEFAULT;

MySQL DROP PRIMARY KEY索引

要删除索引名称为PRIMARY的主键,请使用以下语句:

DROP INDEX `PRIMARY` ON table_name;

以下语句使用主键创建一个名为t的新表:

CREATE TABLE t(
    pk INT PRIMARY KEY,
    c VARCHAR(10)
);

要删除主键索引,请使用以下语句:

DROP INDEX `PRIMARY` ON t;

在本教程中,您学习了如何使用MySQL DROP INDEX语句删除表的现有索引。