Alex_McAvoy

想要成为渔夫的猎手

SQL 索引的数据定义

【索引】

当表的数据量较大时,查询操作会比较耗时,而建立索引就是为了加快查询速度,可以根据需要在基本表上建立一个或多个索引,以加快查找速度

建立与删除索引一般由数据库管理员建表的人来完成,此外 DBMS 一般会自动建立主键 PRIMARY KEY 和取唯一值 UNIQUE 列的索引

索引是 RDBMS 的内部实现技术,属于内模式的范畴,RDBMS 会在执行查询时,自动选择合适的索引,用户不必显式地选择索引

索引虽然能够加速数据库查询,但需要占用一定的存储空间,而且当基本表更新时,DBMS 会对索引进行自动维护,这些都会增加数据库的负担,因此要根据实际需要来有选择地创建索引

目前 SQL 标准中没有涉及索引,但商用数据库管理系统一般都支持索引,只是不同的 RDBMS 支持的索引类型不同

【索引定义】

在 SQL 中,建立索引的语法如下:

1
2
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名1> [<次序1>] [,<列名2> [<次序2>]] ... [,<列名n> [<次序n>]]);

其中,<表名> 是要建立索引的基本表的名字,<列名> 代表索引要建立在该表的哪些列上,<次序> 用于指定索引值的排列次序,默认值为升序 ASC,可选值为降序 DESC

UNIQUE 代表要建立的索引是唯一索引,该索引的每一个索引值对应唯一的数据记录;CLUSTER 代表要建立的索引是聚簇索引,该索引一般建立在需要经常查询的列上,经常更新的列不宜建立该索引,且一个基本表上最多只能建立一个聚簇索引

例如,为学生-课程数据库中的学生表 Student、课程表 Course、选课表 SC 建立索引,其中 Student 按学号 Sno 升序建立唯一索引 Stusno,Course 按课程号 Cno 升序建立唯一索引 Coucno,SC 按学号 Sno 升序、课程号 Cno 降序建立唯一索引 SCno

1
2
3
CREATE UNIQUE INDEX Stusno ON Student(Sno);           /*Student按Sno升序*/
CREATE UNIQUE INDEX Coucno ON Course(Cno); /*Course按Cno升序*/
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC); /*SC按Sno升序按Cno降序*/

【索引修改】

对于已建立的索引,可以使用 ALTER INDEX 语句进行修改,但不能用于修改索引的定义(添加列、删除列、更改列的顺序)

最常用的索引修改是重新命名索引,其语法如下

1
ALTER INDEX <旧索引名> RENAME TO <新索引名>

例如,将 SC 表的 SCno 索引名改为 SCSno

1
ALTER INDEX SCno RENAME TO SCSno;

【索引删除】

索引一经建立,就由系统使用、维护,不需要用户干预,若数据增删改频繁,系统会花费大量时来维护索引,变相的降低了查询效率,因此可以删除一些不必要的索引

在 SQL 中,删除索引的语法如下

1
DROP INDEX <索引名>

例如,删除 Student 表的 Stusname 索引

1
DROP INDEX Stusname
感谢您对我的支持,让我继续努力分享有用的技术与知识点!