SQL 删除索引
在SQL中, DROP 语句用于删除已存在的数据库对象,例如表、索引、视图或存储过程。使用DROP语句删除任何数据库对象时,它们将被永久删除,包括相关的数据。
而当数据库对象是索引时,SQL中使用 DROP INDEX 语句。
删除SQL索引
可以使用 DROP INDEX 语句从数据库表中删除SQL索引。
重要的是要理解删除索引可能会对数据库查询的性能产生重大影响。因此,只有在确定不再需要索引时才尝试删除它。
注意 :我们无法删除由主键或唯一约束创建的索引。要删除它们,您需要使用ALTER TABLE语句完全删除约束。
语法
以下是SQL中 DROP INDEX 命令的语法 –
在这里,
- index_name 是您要删除的索引的名称。
- table_name 是与索引关联的表的名称。
示例
在本示例中,我们将学习如何在名为 CUSTOMERS 的表上删除索引,可以使用以下查询来创建该表:
现在,使用以下查询将一些值插入到上述创建的表中 –
一旦表被创建,使用以下查询在CUSTOMERS表中的列 NAME 上创建一个索引
现在,使用以下SHOW INDEX查询验证CUSTOMERS表上是否创建了索引-
执行上述查询后,索引列表显示如下:
Table | Non_unique | Key_name | Seq_in_index | Column_name |
---|---|---|---|---|
customers | 0 | PRIMARY | 1 | ID |
customers | 1 | index_name | 1 | NAME |
然后,使用以下语句在CUSTOMERS表中删除相同索引INDEX_NAME-
DROP INDEX
输出
如果我们编译和运行上述查询,结果如下:
验证
使用以下查询验证是否删除了列 NAME 的索引 –
在下面的索引列表中,您可以观察到缺少列名 Name 。
Table | Non_unique | Key_name | Seq_in_index | Column_name |
---|---|---|---|---|
customers | 0 | PRIMARY | 1 | ID |
DROP INDEX with IF EXISTS
SQL中的 DROP INDEX IF EXISTS 语句用于仅在表中存在该索引时删除索引。当您想删除索引但不确定是否存在时,此语句非常有用。此子句 不 受MySQL支持。
IF EXISTS 子句确保仅在索引存在时才删除该索引。如果索引不存在,则仅终止执行。
语法
DROP INDEX IF EXISTS的语法如下−
在这里,
- index_name 是您想要删除的索引的名称。
- table_name 是与该索引关联的表的名称。
示例
在此示例中,让我们尝试在SQL Server数据库中删除一个索引。
让我们考虑之前创建的表CUSTOMERS,并使用以下查询在表中为NAME列创建一个索引-
然后,让我们使用以下查询来放弃它 −
输出
当我们执行上面的查询时,输出如下所示-
验证
让我们使用以下查询来验证名称的索引是否被删除了:
正如您所观察到的,列名称在索引列表中被删除。
index_name | index_description | index_keys |
---|---|---|
PK__CUSTOMER__3214EC27CB063BB7 | 集群索引,唯一索引,主键位于PRIMARY中的PRIMARY | ID |
示例
现在,让我们使用以下查询删除在CUSTOMERS表中不存在的索引 。
输出
由于数据库中不存在指定名称的索引,因此上述查询会简单地终止执行,而不会报错。
删除由PRIMARY KEY或UNIQUE创建的索引
DROP INDEX语句不会删除由PRIMARY KEY或UNIQUE约束创建的索引。要删除与其关联的索引,我们需要完全删除这些约束。可以使用 ALTER TABLE… DROP CONSTRAINT 语句来实现。
语法
ALTER TABLE… DROP CONSTRAINT语句的SQL语法如下:
这里,
- table_name 是包含主键约束的表的名称。
- constraint_name 是您要删除的主键约束的名称。
示例
假设先前创建了一个表(CUSTOMERS),让我们首先使用以下查询列出在该表上创建的所有索引 –
列表按照如下方式显示−
index_name | index_description | index_keys |
---|---|---|
PK__CUSTOMER__3214EC27CB063BB7 | 非聚集性索引,位于PRIMARYID上 | ID |
在这里, PK__CUSTOMER__3214EC27CB063BB7 是在 ID 列上创建的 PRIMARY KEY 约束的名称,该列位于 CUSTOMERS 表中。
现在,让我们删除由PRIMARY KEY约束创建的索引。
输出
执行上述查询时,得到的输出如下:
验证
通过使用以下查询列出现有的索引来验证是否已删除:
由于索引列表为空,显示了以下错误。