4.5.3 创建索引

4.5.3 创建索引

许多查询只涉及文件中的少量记录。例如,像这样的查询”找出Physics系的所有教师“,或”找出ID为22201的学生的tot_cred“,只涉及学生记录中的一小部分。
如果系统读取每条记录并逐个检查其ID域是否为”22201”,或者dept_name域是否取值为” Physics“,这样的方式是很低效的。

什么是索引

在关系的属性上所创建的索引(index)是一种数据结构,

索引的作用

索引允许数据库系统高效地找到关系中那些在索引属性上取给定值的元组,而不用扫描关系中的所有元组。
例如,如果我们在student关系的属性ID上创建了索引,数据库系统不用读取student关系中的所有元组,就可以直接找到任何像22201或4553那样具有指定ID值的记录。

索引也可以建立在一个属性列表上,例如在student的属性namedept_name上。

我们将在后面第11章学习索引是如何实现的,包括一种被称作B+树的索引,它是一种特别的广泛使用的索引类型。

如何创建索引

尽管SQL语言没有给出创建索引的正式语法定义,但很多数据库都支持使用如下所示的语法形式来创建索引:

1
2
create index studentID_index
on student(ID);

上述语句在student关系的属性ID上创建了一个名为studentID_index的索引。

查询是自动使用索引

如果用户提交的SQL查询可以从索引的使用中获益,那么**SQL查询处理器就会自动使用索引**。例如,给定的SQL査询是选出ID为22201的student元组,SQL查询处理器就会使用上面定义的studentID_index索引来找到所需元组,而不用读取整个关系。