2024年1月18日发(作者:)

Linux1 索引的创建与删除

为了加快数据查询速度,MySQL运行用户为一个表达特定字段设置索引,一个索引就是该字段值的一个目录列表。有了索引,MySQL就不必通过浏览表中的每一行来查找和指定查询条件相匹配的记录,而是通过索引来查找和值得查询条件相匹配的记录。这样对于一个数据量很大的表来说,由于索引比较小,使用索引可以明显地减少数据查询的执行时间。索引可以在使用create table语句创建表的同时创建,也可以使用create index语句在已存在表中添加。

1.创建表的同时创建索引

前面提到过在使用create table语句创建表student时,使用primary key子句为该表指定一个主键sno,那么MySQL会自动为该表的sno字段创建索引。此外,在创建表时还可以用index子句或unique子句来创建索引。

例如,创建一个选课课程表course,将课程编号cno字段定义为主键,同时为课程名称cname创建一个名为cna的索引,则需要在终端中输入“create table course

(cno varchar (5) not null,cname varchar (30) not null,teacher varchar (20),primary

key (con),index can (cname));”命令,并按【回车】键,如图4-32所示。

图4-32 在创建表的同时创建索引

如果将子句index cna(cname)改为unique(cname),则创建的是unique(独一无二)索引,该索引要求索引字段中的值必须是唯一的,即表中各条记录中该字段的值不能相同。若想在表中插入一个与现有记录中该字段值相同的记录,则会失败,如图4-33所示。

图4-33 创建unique索引

2.向已存在的表添加索引

使用create index语句可以用来向已存在的表添加索引,它的基本语句格式为“create [unique] index 索引名 on 表名称(字段名1[(长度)],…);”。

例如,为表student的sname字段创建名为sna的索引,可以在终端中输入“create

index sna on student(sname);”命令,并按【回车】键,如图4-34所示。

图4-34 向已存在的表添加索引

对于类型为char和varchar 的字段,建立索引时还可以指定索引长度值(对于类型为blob和text的字段,索引长度值是必须指定的)。

例如,为表student的sname自动创建名为sna的索引,并指定索引长度值为10,可使用“create index sna on student(sname(10));”的命令,如图4-35所示。

图4-35 创建sna索引

这里指定索引长度值为10,是基于大多数名字通常在前10个字符不一样的考虑,这样创建的索引文件会更小一些,即可以节省磁盘空间,又可以加速insert的操作。

索引虽然可以加快数据查询的速度,但它占有一定的磁盘空间,而且会影响insert、update和delete命令的执行时间,因此每当表中的记录被添加、修改或删除时,索引都必须更新。

3.删除索引

不需要索引时,可使用drop index语句删除索引,语句格式为“drop index 索引名 on 表名称;”。

例如,删除表student中索引名为sna的索引,可在终端中输入“drop index sna

on student;”命令,并按【回车】键执行,如图4-36所示。

图4-36 删除索引