创建和使用索引以提高性能
如果经常依据特定的字段搜索表或对表的记录进行排序,则可以通过创建该字段的索引来加快执行这些操作的速度。Microsoft Office Access 在表中使用索引就如同您在书中使用索引一样:为了查找数据,Access 会在索引中查找数据的位置。在一些情况下,例如对于主键,Access 会自动为您创建索引。在另一些情况下,您可能需要自己创建索引。
本文介绍索引,并说明如何确定为哪些字段创建索引,以及如何创建、删除或更改索引。本文还说明 Access 在哪些情况下会自动创建索引。
注释 不能使用本文所述的方法为 Web 数据库中的表创建索引。Web 数据库的性能取决于承载 Web 数据库的 SharePoint 服务器的性能。
本文内容
可以使用索引来帮助 Access 更快速地查找记录并对其进行排序。索引根据自身包含的一个或多个字段来存储记录的位置。索引可以比它描述的表小得多,以便 Access 能够更有效地进行读取,具体取决于索引字段的唯一值的数量。
以书籍索引为例:书籍索引是一个包含书中出现的词语的列表。另外,该列表中的每个条目还显示了包含特定词语的页面的页码。若要在书中查找某个特定词语,则使用索引进行查找要比翻书查找的速度快得多。
在 Access 中,索引类似于一个表中出现的字段值的列表。另外,该列表中的每个条目还显示了包含字段值的记录的位置。若要查找某个特定的字段值,则使用索引进行查找要比读取整个表进行查找的速度快得多。
表中不同字段值的数量越多,索引对提高搜索和选择查询的性能的帮助就越大。给定字段值在表中出现的次数越多,索引带来的性能改进就越少。以书中出现的词语为例:“的”一词可能会在书中频繁出现,以致于阅读该词的列表项所花费的时间几乎与阅读整本书所花费的时间相当!同样,对于仅包含几个值的字段而言,为其创建索引也不会带来更多好处,这是因为每个值出现的次数太多了。
当 Access 通过索引获得记录的位置后,可通过直接移到正确的位置来检索这些记录中的数据。这样一来,使用索引查找数据会比通过扫描表中的所有记录来查找数据快很多。
在追加、删除或更新数据时,必须更新受影响的表中的所有索引以反映变化。这会影响性能。再次以书为例:如果您进行更改,则同时必须更改索引,否则索引将不正确。更改索引会花费很多时间,而如果没有任何索引,则可节省这些时间。Access 也是如此:索引会使更改数据所花费的时间更多。
可以根据一个字段或多个字段来创建索引。您应考虑为如下字段创建索引:经常搜索的字段、进行排序的字段,以及在查询中联接到其他表中的字段的字段。索引可帮助加快搜索和选择查询的速度,但在您添加或更新数据时,索引会降低性能。
如果在包含一个或更多个索引字段的表中输入数据,则每次添加或更改记录时,Access 都必须更新索引。如果目标表包含索引,则通过使用追加查询或通过追加导入的记录来添加记录也可能会比平时慢。
注释 表中的主键是自动创建索引的。有关主键的详细信息,请参阅“请参阅”部分。
无法为数据类型为“OLE 对象”、“附件”或“计算”的字段创建索引。对于其他字段,如果满足以下所有条件,则考虑为字段创建索引:
✍ | 预期会搜索存储在字段中的值。 |
✍ | 预期会对字段中的值进行排序。 |
✍ | 预期会在字段中存储许多不同的值。如果字段中的许多值都是相同的,则索引可能无法显著加快查询速度。 |
如果您觉得自己将经常同时依据两个或更多个字段进行搜索或排序,则可以为该字段组合创建索引。例如,如果经常在同一个查询中为“供应商”和“产品名称”字段指定条件,则在这两个字段上创建多字段索引就很有意义。
依据多字段索引对表进行排序时,Access 会先依据为索引定义的第一个字段来进行排序。创建多字段索引时,您要指定字段的次序。如果在第一个字段中的记录具有重复值,则 Access 会接着依据为索引定义的第二个字段来进行排序,依次类推。
在一个多字段索引中最多可以包含 10 个字段。
要创建索引,请先决定是创建单字段索引还是多字段索引。通过设置“索引”属性可创建单字段索引。下表列出了“索引”属性的可能设置。
“索引”属性的设置 |
含义 |
无 |
不在此字段上创建索引(或删除现有索引) |
有(有重复) |
在此字段上创建索引 |
有(无重复) |
在此字段上创建唯一索引 |
如果创建唯一索引,则 Access 不允许您在字段中输入这样的新值:该值已在其他记录的同一字段中存在。Access 会自动为主键创建唯一索引,但您可能也想禁止其他字段中的重复值。例如,可以在一个存储序列号的字段上创建唯一索引,以便不会有两个产品具有相同的序列号。
有关主键的详细信息,请单击“请参阅”部分中的链接。
创建单字段索引
1. | 在“导航窗格”中,右键单击想在其中创建索引的表的名称,然后在快捷菜单上单击“设计视图”。 |
2. | 单击您想创建索引的字段的“字段名称”。 |
3. | 在“字段属性”下,单击“常规”选项卡。 |
4. | 在“索引”属性中,如果想允许重复,则单击“有(有重复)”,否则单击“有(无重复)”以创建唯一索引。 |
5. | 要保存更改,请在“快速访问工具栏”上单击“保存”,或者按 Ctrl+S。 |
创建多字段索引
1. | 在“导航窗格”中,右键单击想在其中创建索引的表的名称,然后单击“设计视图”。 |
2. | 在“设计”选项卡上的“显示/隐藏”组中,单击“索引”。 |
此时会出现“索引”窗口。调整窗口大小,以便显示一些空白行和索引属性。
要为表创建多字段索引,您要在“索引”窗口中为索引中的每个字段包含一行,并且仅在第一行中包含索引名称。Access 将所有行视为同一索引的一部分,直至它遇到包含另一个索引名称的行为止。要插入一行,请右键单击想插入一行的位置,然后在快捷菜单上单击“插入行”。
3. | 在“索引名称”列中,在第一个空白行内键入索引的名称。可以按照某一个索引字段的名称来命名索引,也可以使用其他名称。 |
4. | 在“字段名称”列中,单击箭头,然后单击想用于索引的第一个字段。 |
5. | 在下一行中,将“索引名称”列留空,然后,在“字段名称”列中单击索引的第二个字段。重复此步,直至选择了要包含在索引中的所有字段为止。 |
注释 默认的排序次序是升序
6. | 要更改字段值的排序次序,请在“索引”窗口的“排序次序”列中单击“升序”或“降序”。 |
7. | 在“索引”窗口中的“索引属性”下,为“索引名称”列中包含索引名称的行指定索引属性。请依据下表来设置属性。 |
标签 |
Value |
主索引 |
如果为“是”,则索引为主键。 |
唯一索引 |
如果为“是”,则索引中的每个值必须唯一。 |
忽略空值 |
如果为“是”,则在索引字段中具有空值的记录被排除在索引之外。 |
8. | 要保存更改,请在“快速访问工具栏”上单击“保存”。 |
键盘快捷方式 按 Ctrl+S。
9. | 关闭“索引”窗口。 |
如果发现某个索引已变得多余或对性能的影响太大,则可以删除它。删除索引时,只会删除索引而不会删除建立索引时所依据的字段。
1. | 在“导航窗格”中,右键单击想在其中删除索引的表的名称,然后在快捷菜单上单击“设计视图”。 |
2. | 在“设计”选项卡上的“显示/隐藏”组中,单击“索引”。 |
此时会出现“索引”窗口。调整窗口大小,以便显示一些空白行和索引属性。
3. | 在“索引”窗口中,选择包含您想删除的索引的行,然后按 Delete。 |
提示 确保选择整个行。
4. | 要保存更改,请在“快速访问工具栏”上单击“保存”。 |
键盘快捷方式 按 Ctrl+S。
5. | 关闭“索引”窗口。 |
您可能想查看表的索引,以衡量它们对性能的影响,或者确保为特定的字段创建了索引。
1. | 在“导航窗格”中,右键单击想在其中更改索引的表的名称,然后在快捷菜单上单击“设计视图”。 |
2. | 在“设计”选项卡上的“显示/隐藏”组中,单击“索引”。 |
此时会出现“索引”窗口。调整窗口大小,以便显示一些空白行和索引属性。
3. | 按照您的需要查看或编辑索引及索引属性。 |
4. | 要保存更改,请在“快速访问工具栏”上单击“保存”。 |
键盘快捷方式 按 Ctrl+S。
5. | 关闭“索引”窗口。 |
在一些情况下,Access 会自动为您创建索引。例如,会自动对指定为表的主键的任何字段创建索引。
自动创建索引的另一个来源是“Access 选项”对话框中的“在导入/创建时自动索引”选项。对于名称以在“在导入/创建时自动索引”框中输入的字符(例如 ID、key、code 或 num)开始或结束的任何字段,Access 都会自动为它们创建索引。要查看或更改当前的设置,请执行下列步骤:
1. | 在“文件”选项卡上,单击“选项”。 |
2. | 在“Access 选项”对话框的左窗格中,单击“对象设计器”,然后在“表设计视图”下的“在导入/创建时自动索引”框中编辑值。使用分号 (;) 来分隔值。 |
注释 如果字段名以此框中列出的值开始或结束,则会自动为字段创建索引。
3. | 单击“确定”。 |
由于每一个额外的索引均需要 Access 执行额外的工作,因此,在添加或更新数据时性能会降低。这样一来,您可能需要考虑更改在“在导入/创建时自动索引”框中显示的值,或减少值的数量,以最大程度地减少所创建的索引数量。