3.5 使用索引提高表的性能
索引相当于数据库表的目录,通过它可以快速查找到某条记录
在百度百科中,索引被解释为“将文献中具有检索意义的事项(可以是人名、地名、词语、概念或其他事项)按照一定方式有序编排起来,以供检索的工具书”。
在数据库中,索引的含义与上述含义相似,它可以极大地提高数据库表的功能,是数据库中必不可少的一个重要概念。
3.5.1 索引的重要性
索引相当于一本书的目录,如果需要查询书本中的某个内容,没有目录的话,则需要从头开始查找,才可能找到所需的内容。而如果有目录,可以通过目录直接跳转到该内容所在的页面,从而节省大量的时间。
对于数据库的表来说,如果希望根据某个字段来查询表中的记录,在该字段没有索引的情况下,需要对表中的所有数据进行一次检索,称之为表扫描,才能够找到所需的记录。
对于大多数表来说,表中的数据是无序输入的,或者表中的数据不是按照查询字段的顺序排列的,这时如果想要在这些无序的数据中查找到所需的数据,表扫描是唯一的办法。但是如果对表中的数据按照查询的字段进行排序,查找起来就会轻松很多,这就是数据表使用的基本原理。
Access使用索引来维护表中数据一个或者多个内部排序,默认情况下表是没有进行索引设置的(主键除外,前面曾说过,主键始终是索引),设置一个简单的索引很简单,只需要将该字段的“索引”属性设置为“有(有重复)”或者“有(无重复)”即可,如图3-18所示。
图3-18 设置简单索引
3.5.2 创建复合索引
索引实质上是对表中数据的排序,虽然它不会改变表中数据的排列顺序,但是与数据排序有着许多相似点。
其中的一个相似点就是可以进行类似多条件排序的多字段索引,也称为复合索引。创建复合索引的方法十分简单,只需要单击“表格工具设计”选项卡中的“索引”按钮,在打开的“索引”对话框中进行设置即可,如图3-19所示。
图3-19 复合索引
索引名称所在行及其下一个索引名称之前的所有没有索引名称的行,构成一个复合索引。在索引对话框选择索引名称之后,可以发现该索引有3个属性,这3个属性的含义如下所示。
♦ 主索引:设置为“是”时,表使用该索引作为主键。该属性默认设置为“否”,如果需要设置为“是”,必须记住主键“唯一且不能为空”的规则。
♦ 唯一索引:该属性相当于设置简单索引时的“有(无重复)”选项,如果是复合索引将该属性设置为“是”,则该索引的所有字段的组合值必须唯一。
♦ 忽略索引:当该属性设置为“是”,索引字段为空值(复合索引则是所有的字段都为空值)不会对索引有任何影响。
3.5.3 合理使用索引
既然索引有如此多的好处,是否可以为表中的所有字段均设置索引呢?
索引虽然可以提高表的性能,但是索引自身也是需要占用资源的。相同的数据库文件,包含索引比不包含索引的文件要大,并且每一次对包含索引的表的记录进行修改,Access就会自动地更新相关的索引。
比如某个表包含有10个索引,现在在表中添加一条记录,则在添加该记录之后,Access还需要对这10个索引进行修改,这就会占用大量的系统资源。所以,在需要经常修改的表中,是不适合使用大量的索引的。
一般来说,在表使用初期,使用简单的索引就可以了,在使用一定时间之后,了解了最为常用的查询字段和方法之后,再设置复合索引。
查询效率和表索引所占用的系统资源之间是一对矛盾的存在,在实际使用中需要根据实际情况进行折中选择。