前面【数据库系统概论】数据定义之基本表的定义/创建、修改和删除提过,SQL的数据定义功能包括定义表、定义视图和定义索引。索引属于数据库系统三级模式结构中的内模式范畴。
建立索引是加快查询速度的有效手段。用户可以根据需要为表中的单列(或多列)建立索引,也可以在一个表上建立一个或多个索引,以提供多种存取路径,从而加快查询速度。
数据库索引有多种类型,常见的索引包括顺序文件上的索引、B+树索引、hash索引等。关于索引,可以看看这篇文章:【MySQL】什么是索引?如何选择索引类型?
索引虽然能够加速数据库查询,但需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护,这些都会增加数据库的负担,因此要根据实际应用的需要有选择地创建索引。
DBA或表的属主(即建立表的人:Owner)根据需要建立索引。有些DBMS自动建立以下列上的索引:PRIMARY KEY 和 UNIQUE。
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
为Student表、Course表、SC表分别建立索引,其中Student表按学号升序建立唯一索引,Course表按课程号升序建立唯一索引,SC表按学号升序和成绩降序建立唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Grade DESC);
对于索引的修改往往只涉及到改名。
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
将SC表的SCno索引名改为SCSno:
ALTER INDEX SCno RENAME TO SCSno;
索引一经建立就由系统使用和维护。但是入股哦数据修改频繁,系统就会花费许多时间来维护索引,从而降低了查询效率。这时可以删除一些不必要的索引。
DROP INDEX <索引名>;
删除索引时,系统会从数据字典中删去有关该索引的描述。
删除Student表中的Stusno索引:
DROP INDEX Stusno;
好啦,这次的分享就到这里,感谢大家看到这里