MySql中索引的建立和删除

本文深入讲解MySQL数据库中索引的创建与删除,涵盖普通索引、唯一索引、全文索引、多列索引和空间索引的创建方法,以及如何通过SQL语句添加和删除各种类型的索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引的建立和删除

1.MySql数据库中创建索引

在mysql中创建表的时候可以直接创建索引

CREATE TABLE 表名(字段名 数据类型 [完整性约束条件],
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[索引名](字段名1 [(长度)] [ASC | DESC])
)
示例:
CREATE TABLE index1 (id INT ,
name VARCHAR(20) ,
sex BOOLEAN ,
INDEX ( id) //声明索引
);

  • UNIQUE:可选。表示索引为唯一性索引。
  • FULLTEXT;可选。表示索引为全文索引。
  • SPATIAL:可选。表示索引为空间索引。
  • INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。
  • 索引名:可选。给创建的索引取一个新名称。
  • 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
  • 长度:可选。指索引的长度,必须是字符串类型才可以使用。
  • ASC:可选。表示升序排列。
  • DESC:可选。表示降序排列。

查看索引是否建立:

show create table;

查看索引是否使用:

EXPLAIN SELECT * FROM index1 where id =1 \G

1.1创建普通索引

创建普通索引不需要添加任何UNIQUE、FULLTEXT、或者SPATIAL关键字
示例:创建一个名为index1的数据库,并在表ID上建立一个普通索引

create table index1(id INT,
name VARCHAR(20),
sex BOOLEAN,
INDEX(id)
);

1.2创建唯一索引

使用UNIQUE进行约束,可创建唯一性索引

实例:创建一个名为index2的数据表,在表内的id字段上建立一个唯一性索引,并且设置id字段以升序的形式排列。

创建一个唯一性索引的SQL代码如下:
CREATE TABLE index2(id INT UNIQUE,
name VARCHAR(20),
UNIQUE INDEX index2_id(id ASC)
);

如上,在id字段上建立了名为id和index2_id的两个唯一性索引。这样做,可以提高数据的查询速度。
index2_id是为唯一性索引起的一个新名字。

如果在创建表index2时,id字段没有进行唯一约束,也可成功创建唯一索引,但可能达不到提高查询速度的目的

CREATE TABLE index2(id INT,
name VARCHAR(20),
UNIQUE INDEX index2_id(id ASC)
);

1.3创建全文索引

使用全文索引使用FULLTEXT参数,并且只能在CHAR、VARCHAR或TEXT类型的字段上个创建。
示例:

CREATE TABLE index3(id INT,
info VARCHAR(20),
FULLTEXT INDEX index3_info(info)
)ENGINE=MyISAM;

注意

  • ENGINE=MyISAM表明该表多用于查询,不支持事物,需经常备份数据库保证数据完成;
  • ENGINE=InnoDB表明该表支持事物操作。该类型表需要mysql5.6.19版本之后才可支持使用FULLTEXT创建全文搜索。
  • 全文索引适用于大型数据库,对于小的数据库用处较小。

1.4创建单列索引

单列索引是在数据表的单个字段上创建的索引。一个表中可以创建多个单列索引。唯一性索引和普通索引等都为单列索引。
实例:创建一个名为index4的数据表,在表中的subject字段上建立名为index4_st的单列索引。

CREATE TABLE index4(id INT,
subject VARCHAR(30),
INDEX index4_st(subject(10))
);

1.5创建多列索引

创建多列索引是在表的多个字段上创建一个索引。

实例:创建一个名为index5的数据表,在表中的name和sex字段上建立名为index5_ns的多列索引。

CREATE TABLE index5(id INT,
name VARCHAR(20),
sex CHAR(4),
INDEX index5_ns(name,sex)
);

注意

  • 多列索引中,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用
  • 在优化查询速度时,可以考虑优化多列索引。

1.6创建空间索引

使用SPATIAL参数能够创建空间索引。创建空间索引时,表的存储引擎必须是MyISAM类型。而且,索引字段必须有非空约束。

实例:创建一个名为index6的数据表,在表中的space字段上建立名为index6_sp的空间索引。

CREATE TABLE index6(id INT,
space GEOMETRY NOT NULL,
SPATIAL INDEX index6_sp(space)
)ENGINE=MyISAM;

注意

  • space字段是非空的,而且数据类型是GEOMETRY类型。这个类型是空间数据类型。
  • 空间数据类型包括GEOMETRY、POINT、LINESTRING和POLYGON类型等。这些空间数据类型平时很少用到

2 添加索引

  1. 添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )

  1. 添加UNIQUE(唯一索引)

mysql>ALTER TABLE table_name ADD UNIQUE ( column )

  1. 添加INDEX(普通索引)

mysql>ALTER TABLE table_name ADD INDEX index_name ( column )

  1. 添加FULLTEXT(全文索引)

mysql>ALTER TABLE table_name ADD FULLTEXT ( column)

  1. 添加多列索引

mysql>ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

3.删除索引

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

其中,前两条语句是等价的,删除掉table_name中的索引index_name。

第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值