数据库创建索引和删除索引的方式总结

本文详细介绍了如何在MySQL中使用ALTER和CREATE创建不同类型的索引,如主键、唯一索引、普通索引和全文索引,并对比了两者之间的区别。此外,涵盖了删除索引的方法和索引执行效率的排序。

一. 创建索引

1.1 使用Alter创建索引

1.添加主键索引

特点:数据列不允许重复,不能为null,一张表只能有一个主键;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD Primary key (col);

2.添加唯一索引

特点:索引的值是唯一的,可以为null;Mysql主动将该字段进行排序

ALTER TABLE 表名 ADD unique <索引名> (col1, col2, ...col3);

3.添加普通索引

特点:添加普通索引, 索引值可以不唯一,可以为null

Alter table 表名 ADD index <索引名> (col1, col2, ...,);

4.添加全文索引

特点:只能在文本类型CHARVARCHAR, TEXT类型字段上创建全文索引;

ALTER TABLE 表名 ADD Fulltext <索引名> (col)

5.添加多列索引

特点:多列是唯一的

ALTER TABLE 表名 ADD UNIQUE (col1, col2, ..., )

1.2 使用Create创建索引

语法:create index 索引名 on 表名(字段)

添加唯一索引

create unique index 索引名 on table 表名(col1, col2, ..., )

添加普通索引

create index 索引名 on table 表名(col1, col2, ..., )

1.3 两种创建索引方式的区别

  1. Alter可以省略索引名。如果省略索引名,数据库会默认根据第一个索引列赋予一个名称;Create必须指定索引名称。

  2. Create不能用于创建Primary key索引;

  3. Alter允许一条语句同时创建多个索引;Create一次只能创建一个索引

create unique index 索引名 on table 表名(col1, col2, ..., )

ALTER TABLE 表名 ADD Primary key (id), ADD index <索引名> (col1, col2, …,)

索引执行效率分析:
主键索引 > 唯一性索引 > 普通索引

二、 删除索引

# 第一种方式
drop index 索引名 on 表名;

# 第二种方式
alter table 表名 drop index 索引名;

# 第三种方式
alter table 表名 drop primary key

分析:
第三种方式只在删除primary key中使用。因为一个表只能存在一个primary key索引,所以不需要指定索引名;
对于第三种方式,若没有创建primary key索引,但表中具有一个或多个unique索引,则默认删除第一个unique索引;
若删除表中的某列,索引会受到影响。对于多列组合的索引,如果删除其中的某一列,则该列会从对应的索引中被删除(删除列,不删除索引);删除多个组成索引的所有列,则索引将被删除(不仅删除列,还删除索引)。

数据库创建索引是优化查询性能的重要手段之一。创建索引的方法步骤会因数据库管理系统(如 MySQL、PostgreSQL、Oracle 等)的不同而略有差异,但其核心语法原则基本一致。以下是创建索引的通用方法步骤。 ### 1. 创建索引的基本语法 创建索引通常使用 `CREATE INDEX` 语句。该语句允许在指定的表上为一个或多个列创建索引。基本语法如下: ```sql CREATE INDEX index_name ON table_name (column1, column2, ...); ``` - `index_name` 是为索引指定的名称,通常推荐使用 `idx_table_column` 的命名规范。 - `table_name` 是需要创建索引的表名。 - `(column1, column2, ...)` 是需要被索引的一个或多个列名。 例如,在名为 `users` 的表中为 `username` 列创建索引,可以使用以下语句: ```sql CREATE INDEX idx_username ON users (username); ``` 此语句将为 `username` 列创建一个名为 `idx_username` 的索引[^2]。 ### 2. 创建索引的步骤 #### 步骤一:确定需要索引的列 在创建索引之前,需要分析查询模式,确定哪些列经常用于查询条件(如 `WHERE`、`JOIN` 或 `ORDER BY` 子句)。通常,频繁查询且具有高选择性的列更适合创建索引。 #### 步骤二:选择合适的索引类型 根据需求选择合适的索引类型,例如: - **单列索引**:仅对一个列创建索引。 - **复合索引**:对多个列组合创建索引,适用于多条件查询。 - **唯一索引**:确保索引列中的值是唯一的,适用于主键或唯一约束列。 #### 步骤三:执行创建索引SQL 语句 根据需求编写并执行 `CREATE INDEX` 语句。例如,在名为 `t_index3` 的表中为 `sno` 列创建索引,可以使用以下语句: ```sql CREATE INDEX idx_t_index3 ON t_index3 (sno); ``` 此语句将为 `sno` 列创建一个名为 `idx_t_index3` 的索引[^1]。 #### 步骤四:监控索引的使用情况 创建索引后,需要监控数据库性能,确保索引被正确使用。可以通过执行计划(如 `EXPLAIN` 命令)查看查询是否利用了索引。如果索引未被使用,可能需要调整索引的设计或查询语句。 ### 3. 注意事项 - **写入性能影响**:每次在有索引的表中插入、更新或删除数据时,索引也需要更新。这会稍微减慢写入操作的速度。因此,需要权衡查询性能提升写入性能下降的影响[^3]。 - **避免过度索引**:过多的索引可能导致存储空间浪费维护成本增加。应根据实际需求合理选择需要索引的列。 - **命名规范**:索引名称推荐使用 `idx_table_column` 的命名方式,以提高可读性维护性。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值