Access 2003完整教程:改进 Access 数据库的性能

根据计算机的配置和工作环境,可以采取一些措施来改进 Microsoft Access 或Microsoft Access 数据库的性能。

如果正在优化 Access 数据库的性能,最好从“性能分析器”入手。可使用“性能分析器”来分析整个数据库或仅从数据库中选择对象。“性能分析器”也可根据您的需要,按建议进行修改。

运行“性能分析器”

使用“性能分析器”可以优化Microsoft Access 数据库的性能。“性能分析器”在Access 项目中不可用。

  1. 打开要优化的 Access 数据库。
  2. 在“工具”菜单上,指向“分析”,然后单击“性能”。
  3. 单击要优化的数据库对象类型的选项卡。单击“全部对象类型”选项卡可以同时查看全部数据库的对象列表。
  4. 选择所要优化的数据库对象名称。单击“全部选定”可以选择列表中所有的数据库对象。
  5. 重复第 3 和第 4 步,直到已经选择所有要优化的数据库对象,然后单击“确定”。

    “性能分析器”列出三种分析结果:“推荐”“建议”“意见”。当单击“分析结果”列表中的项目时,列表下面的“分析注释”框中会显示建议优化的相关信息。在执行“建议”优化之前,应该先考虑潜在的权衡关系。若要查看权衡关系的说明,请单击列表中的“建议”,然后阅读“分析注释”框中的信息。Access 可以执行“推荐”“建议”的优化。但“意见”优化必须由您自己来执行。

  6. 单击一个或多个要执行的“推荐”或“建议”优化,然后单击“优化”。“性能分析器”便会执行优化,然后将它们标记为“固定”。继续该过程直到“性能分析器”已经完成全部要执行的“推荐”和“建议”。

    若要执行全部“推荐”和“建议”优化,请单击“全部选定”,然后再单击“优化”。

    若要要执行“意见”优化,请单击优化,然后按照“分析注释”框中显示的指导进行。

注释“性能分析器”并不提供如何改善 Microsoft Access 本身或运行它的系统的性能的建议。

改进 Microsoft Access 和系统的性能

下列方法能帮助用户改进计算机上 Microsoft Access 的性能:

改进表的性能

改进链接表的性能

注释只可链接Microsoft Access 数据库中的表,而不能链接Microsoft Access 项目中的表。

虽然可以将链接表用作常规 Microsoft Access 数据库中的表,但必须记住,它们实际上并不在 Access 数据库中。每次查看链接表的数据时,Microsoft Access 必须从另一个文件中检索记录。这需要一定的时间,尤其是当链接表在网络上或者在SQL 数据库中时更是如此。

如果所用的链接表是在网络上或者 SQL 数据库中,遵循下列准则可获得最佳效果:

改进链接到 SQL Server 的表的性能

如果前端/后端应用程序中的数据只包括 Microsoft SQL Server 表,可使用 Microsoft Access 项目或 Microsoft Access 数据库作为应用程序的前端。但是,若使用 Access 项目作为前端,则会从中得到诸多好处,如可以有更多表和更大的数据库大小。但是如果想要前端/后端应用程序中的数据既包括 Microsoft Access 表,又包括 Microsoft SQL Server 表,就必须使用 Access 数据库作为前端。

如果正在连接外部 SQL 数据库的表,则可通过链接SQL 表而不是直接打开表,而获得最佳性能。可以只使用 Microsoft Visual Basic 代码直接打开外部的 SQL 表。链接的表比直接打开的表速度更快,功能更强,而且效率更高。

其他优化性能的提示

改进多用户环境中的性能

下列指导可以帮助用户优化在多用户环境中使用Microsoft Access 数据库的性能。

改进查询的性能

数据库、表和索引

字段、计算和条件

表达式和 Rushmore 优化

Rushmore 优化概述

Microsoft Access 可以在查询设计网格的“条件”行或在 SQL SELECT 语句的 WHERE 从句中,优化简单或复杂的表达式。对于某些类型的复杂表达式,Access 可以使用 Rushmore,一种由Microsoft Jet 数据库引擎所使用的数据访问技术,来实现更高级别的优化。此外,使用 Rushmore 还能极大地优化Count函数的查询。

Rushmore 查询不仅用于 Access 表,还用于 Microsoft FoxPro 表及 dBASE 表(.dbf 文件)。不能将 Rushmore 用于ODBC 数据源,因为 Access 会将这些查询发送到 ODBC 数据源而不是在本地进行处理。

简单可优化表达式

简单可优化表达式可以形成完整的表达式或显示为表达式的一部分。简单的可优化表达式采取下列形式之一:

索引字段 比较运算符 表达式

[Order Date] = #09/15/96#

表达式 比较运算符 索引字段

#11/1/96# < [HireDate]

在简单可优化的表达式中:

如果已为“雇员”表中的“姓氏”、“年龄”及“雇用日期”字段创建了索引,则下列表达式是简单可优化表达式:

[姓氏] = "王"

[年龄] >= 21

#12/30/90# < [雇用日期]

雇员.[姓氏] = 客户.[姓氏]

[姓氏] In ("王", "李", "张")

[年龄] Between 18 And 65

复杂表达式

复杂表达式是通过用AndOr运算符组合简单表达式而创建的。复杂表达式采取下列形式之一:

简单表达式And简单表达式

简单表达式Or简单表达式

复杂表达式是完全可优化或部分可优化的,具体优化方式取决于是一个还是两个简单表达式可优化,以及使用哪种运算符组合。如果以下三个条件均为真,则复杂表达式就是 Rushmore 可优化的:

注释如果按照字段在“索引”窗口中的显示顺序来查询索引字段,从第一个索引字段开始,然后继续相邻的字段(最多可包含 10 个字段),则可以优化多字段索引。例如,如果有一个包含“姓氏”和“名字”字段的多字段索引,则可以针对“姓氏”或“姓氏”和“名字”优化查询,但是不能针对“名字”优化查询。

下列各种不同的简单查询条件表达式的组合表明查询优化的级别。

完全可优化的查询结果(使用 Rushmore)

部分可优化的查询结果(不使用 Rushmore)

不可优化的查询结果

另外,也可以使用圆括号将简单表达式的组合加以分组,上面的规则也适用于用括号加以分组的表达式组合。

将简单可优化表达式组合成复杂表达式后,这些复杂表达式还可以组合成更复杂的表达式,而且根据上面的规则该表达式可能是可优化的。

以下示例的假设前提是您已为“姓氏”和“雇用日期”字段(使用这两个字段的简单表达式是可优化的)创建了索引,但没为“名字”字段(使用该字段的简单表达式是不可优化的)创建索引。下面的简单表达式组合示例表明了结果的优化程度。

完全可优化的查询结果(使用 Rushmore)

[LastName] = "Smith" And [Hire Date] < #12/30/90#
[LastName] = "Smith" Or [Hire Date] < #12/30/90#

部分可优化的查询结果(不使用 Rushmore)

[LastName] = "Smith" And [MiddleInitial] = "C"
[FirstName] = "Terry" And [MiddleInitial] = "C"

不可优化的查询结果

[LastName] = "Smith" Or [MiddleInitial] = "C"
[FirstName] = "Terry" Or [MiddleInitial]= "C"

一般建议

改进筛选的性能

如果“按窗体筛选”窗口的字段列表太长而无法显示,或不能显示基表中的值,可以更改所有表、查询及窗体的“按窗体筛选”性能,或更改特定窗体的性能。在这两种情况下,都可以防止列表显示基表的字段值,仅在列表上显示特定类型的索引或非索引字段的值,或更改记录限制以决定列表是否显示字段的值。

优化数据库中的所有表、查询及窗体的“按窗体筛选”性能

下列设置影响所有的表和查询,以及“筛选查找”属性设为“数据库默认值”的所有文本框控件。

  1. 在“工具”菜单上,单击“选项”。
  2. 单击“编辑/查找”选项卡,然后根据要实现的性能来设置“按窗体筛选默认为”。
    • 如果值的列表太长,仅显示非索引字段,可以尝试限制列表只显示索引字段,方法是清除“局部非索引字段”和“ODBC 字段”复选框。如果列表太长而显示不下索引字段,则还要清除“局部索引字段”复选框,因为列表中的索引记录太多会影响显示速度。

      注释如果重复使用相同的非索引字段来筛选记录,可以考虑为其编制索引,以改进字段上的筛选及其他搜索操作的性能。

    • 如果列表显示的不是索引或非索引字段的值,请检查“显示值列表于”下面的项,确保选中了合适的复选框,或尝试增加“读取记录超过该数目时不再显示字段列表”框中的数值,使该值大于或等于基表中任何非索引字段的最大记录数。

优化特定窗体的“按窗体筛选”性能

对于窗体上的每个文本框控件,都可以指定字段中保存的值是否在“按窗体筛选”窗口中的对应列表上显示。

  1. 在“设计”视图中打开窗体。
  2. 显示任何文本框控件的属性表。

    操作方法:

    1. 在“设计”视图中打开表、查询、窗体、报表或数据访问页。
    2. 执行下列操作之一,以打开属性表:
      • 在窗体或报表上,双击窗体选择器或报表选择器。

      窗体选择器或报表选择器

      标注 1窗体或报表选择器

      • 在数据访问页上,单击“编辑”菜单上的“选择页”。
      • 在表或查询上,单击工具栏上的“属性”
      • 对于窗体或报表上的某节,则双击节选定器。

      节选定器

      标注 1节选定器

      • 对于数据访问页上的某节,则双击节栏。

      数据访问页中的节栏

      标注 1节栏

      • 若要设置查询字段的属性,请单击“字段”行中的单元格,然后单击工具栏上的“属性”
      • 若要设置查询字段列表的属性,请在该列表的任意位置单击,然后单击工具栏上的“属性”
      • 若要设置数据访问页正文的属性,请在第一个节上单击,然后单击工具栏上的“属性”
      • 若要设置控件的属性,则单击该控件,然后单击工具栏上的“属性”
    3. 在属性表中,单击要设置的属性,然后执行以下操作之一:
      • 如果属性框中显示有箭头,则单击该箭头,并从列表中选择一个值。
      • 在属性框中键入一个设置或表达式。
      • 如果属性框旁边显示有“生成器”按钮,则单击该按钮,以显示一个生成器或生成器列表。

    提示

    • 若要获得属性表中各属性的“帮助”信息,请单击该属性,然后按 F1。

    • 如果在输入或编辑属性设置时需要更多空间,请按 Shift+F2 以便打开“显示比例”框。

    注释如果窗体的“允许设计更改”属性设为“所有视图”,那么也就可以在“窗体”视图和“数据表”视图中设置窗体属性。

  3. 在“筛选查找”属性框中,按照要实现的性能设置属性。
    • 如果列表太长而不能在“按窗体筛选”窗口中显示,请将“筛选查找”属性设为“从不”或“数据库默认值”,然后在“选项”对话框(“工具”菜单)中作适当的更改。
    • 如果在“按窗体筛选”窗口中的列表显示的不是字段中保存的值,请确保“筛选查找”属性未设为“从不”,如果“筛选查找”属性设为“数据库默认值”或“始终”,请在“选项”对话框(“工具”菜单)中作适当的更改。

改进查找和替换的性能

索引有助于 Microsoft Access 快速查找和排序记录。Access 在表中使用索引,就像在书中使用索引一样:查找某个数据时,先在索引中找到数据的位置。可以基于单个字段或多个字段来创建索引。多字段索引能够区分开第一个字段值相同的记录。

确定为哪些字段设置索引

一般可能希望对后面这些字段设置索引:经常搜索的字段、要排序的字段或要在查询中联接到其他表中字段的字段。然而在执行某些操作时,由于许多字段的索引需要更新,所以索引可能会降低某些操作查询(如追加查询)的执行速度。

表的主键将自动设置索引,而对OLE 对象数据类型的字段则不能设置索引。对于其他字段,如果符合下列所有条件,则可以考虑对字段设置索引:

多字段索引

如果经常需要同时搜索或排序两个或更多个字段,可以为该字段组合创建索引。例如,如果经常在同一个查询中对“姓氏”和“名字”字段设置条件,就应该在这两个字段上创建多字段索引。

在使用多字段索引排序表时,Microsoft Access 将首先使用定义在索引中的第一个字段进行排序。如果在第一个字段中出现有重复值的记录,则 Microsoft Access 会用索引中定义的第二个字段进行排序,以此类推。

在多字段索引中最多可以包含 10 个字段。

改进窗体和子窗体的性能

有几种方法可以使窗体运行得更快。

常规提示

关于包含图片和对象的窗体的提示

关于包含代码的窗体的提示

不含窗体模块的窗体加载速度更快,占用磁盘空间更小。如果窗体或窗体上的控件不使用事件过程,窗体就不需要窗体模块。

注意

关于子窗体的提示

改进列表框和组合框的性能

有几种方法可以使列表框、组合框和下拉列表框运行得更快:

注释“查询生成器”在数据访问页中不可用。在独立的数据访问页中,或者将数据访问页指向当前未打开的数据库时,向导也不可用。在这两种情况下 ,必须自己创建列表框或下拉列表框。

改进报表和子报表的性能

有几种方法可以使报表打印得更快。

常规提示

关于包含图片和对象的报表的提示

关于子报表的提示

改进数据访问页的性能

您可以采取一些措施,使数据访问页在“页”视图或带 Service Pack 2 (SP2) 的 Microsoft Internet Explorer 5.01 或其更高版本中加载得更快。

常规提示

控件

图片和对象

分组的页

了解如何将数据库转换为 MDE 文件来提高性能

如果数据库中包含Microsoft Visual Basic for Applications (VBA)代码,则将Microsoft Access 数据库另存为 MDE 文件会编译所有模块、删除所有可编辑的源代码,并压缩目标数据库。Visual Basic 代码将继续运行,但无法再查看或编辑这些代码。

安全性通过将数据库另存为 MDE 文件,无需用户登录或创建和管理用户级安全机制所需的用户帐户及权限,即可帮助保护窗体和报表的安全。

数据库将继续正常运行,也就是说,仍然可以更新数据及运行报表。另外,数据库的大小将会由于代码的删除而减小,因此内存使用得以优化,同时性能得以提高。

将 Access 数据库保存为 MDE 文件可防止以下操作:

需要修改窗体、报表或模块的设计时的注意事项

确保有原始 Access 数据库的一个副本。如果需要修改 MDE 文件中窗体、报表或模块的设计,必须修改原始的 Access 数据库,然后重新保存为 MDE 文件。如果以后需要修改窗体、报表或模块的设计,则可以将包含表的 Access 数据库保存为 MDE 文件,这样会创建使不同版本数据协调的并发数据。基于此,对于前端/后端应用程序的前端数据库,将 Access 数据库保存为 MDE 文件是最合适的。

代码不再使用用户级安全机制

在 Access 的前几个版本中,用户级安全机制可用于 VBA 模块。在 Microsoft Access 2000 及更高版本中,所有用于 Access 数据库 (.mdb) 文件或Access 项目 (.adp)文件的 Visual Basic 代码,包括独立模块和类模块(如窗体和报表后面的代码)都必须通过设置密码,或将数据库另存为 MDE 或 ADE 文件(这种方法会删除源代码),才能启用安全功能。

将数据库保存为 MDE 文件前的注意事项

将 Access 数据库保存为 MDE 文件时,有些限制条件:

另外,如果在将 Access 数据库保存为 MDE 文件前已经定义了数据库密码或用户级安全机制,则这些功能仍适用于从该数据库创建的 MDE 文件。如果该 Access 数据库定义有数据库密码或用户级安全机制,要想删除这些功能,必须在将其保存为 MDE 文件前先行删除。

若要将使用用户级安全机制的 Access 数据库另存为 MDE 文件,必须满足下列要求才能继续操作:

关于引用和 MDE 文件

如果试图从引用另一个数据库或加载项的 Microsoft Access 数据库 (.mdb) 或加载项 (.mda)中创建 MDE 文件,Access 将显示错误信息并且不允许完成操作。若要将引用另一个数据库的数据库保存为 MDE 文件,必须从第一个被引用的数据库开始,将引用链中所有的数据库都保存为 MDE 文件。将第一个数据库保存为 MDE 文件后,必须接着在将下一个数据库保存为 MDE 文件之前,先更新下一个数据库中的引用使其指向新的 MDE 文件,以此类推。

例如,如果 Database1.mdb 引用了 Database2.mdb,而 Database2.mdb 又引用了 Database3.mda,则必须遵循下列过程:

  1. 将 Database3.mdb 保存为 Database3.mde。
  2. 打开 Database2.mdb 并将其引用指向新的 Database3.mde。
  3. 将 Database2.mdb 保存为 Database2.mde。
  4. 打开 Database1.mdb 并将其引用指向新的 Database2.mde。
  5. 将 Database1.mdb 保存为 Database1.mde。

关于将同步复制的数据库保存为 MDE 文件

同步复制的数据库(副本或“设计母版”)不能保存为 MDE 文件。若要将同步复制的数据库保存为 MDE 文件,就必须先删除同步复制。

将数据库保存为 MDE 文件后,可对其进行同步复制,但仅建议在原始数据库不需要作进一步更改的情况下进行同步复制。没有方法可以对“设计母版”MDE 文件中的窗体、报表或代码的设计进行更改,并且在原始数据库中所作的设计更改也不能与预先存在的 MDE 副本同步。基于此,如果需要对一个 MDE 文件的副本集进行设计更改,则必须先在原始数据库中进行更改,再将它重新保存为 MDE 文件,然后从新的 MDE 文件创建并分发一个全新的副本集。

了解如何压缩 Access 数据库

Microsoft Access 将对Access 文件的压缩和修复放在一个进程中处理。

压缩 Access 文件

如果在Access 数据库中删除数据或对象,或者在Access 项目中删除对象,文件可能会变得支离破碎,并使磁盘空间的使用效率降低。压缩 Access 文件将制作文件副本,并重新组织文件在磁盘上的存储方式。压缩上一版的 Access 数据库并不会将其转换为 Access 2002 - 2003 格式。

压缩可以优化 Access 数据库和 Access 项目的性能。然而,在 Access 项目中,压缩不影响位于Microsoft SQL Server 数据库中的数据库对象(如表或视图),而只影响 Access 项目本身的数据库对象。

压缩不影响 Access 项目中的自动编号。但在 Access 数据库中,如果已从具有“自动编号”字段的表的结尾删除了记录,压缩数据库会重设“自动编号”值;您所添加的下一记录的“自动编号”值将大于表中最后一次未删除的记录的“自动编号”值。

修复 Access 文件

多数情况下,在试图打开 Access 文件时,Microsoft Access 会检测该文件是否损坏,如果是,就会提供修复数据库的选项。如果当前的 Access 文件中含有对另一个已损 Access 文件的引用,Access 就不去尝试修复另一个文件。在某些情况下,Access 可能检测不到文件受损。如果 Access 文件表现得难以捉摸,就要压缩并修复它。

Access 可以修复:

若要防止 Access 文件受损,请遵循下列指导原则:

在 Access 意外关闭后修复文件

如果发生严重问题导致 Microsoft Access 关闭,则在 Access 重新启动时,会创建关闭时打开着的文件的副本,并将它命名为 filename_Backup.mdb 或 filename_Backup.adp,其中,filename 是原文件的名称。如果 filename_Backup.mdb 或 filename_Backup.adp 已存在,Access 就会要求您指定文件的名称。然后 Access 会尝试压缩和修复原文件。

上页:Access 2003完整教程:Visual Basic 代码疑难解答 下页:Access 2003完整教程:排序疑难解答 (MDB)

Access 2003完整教程:改进 Access 数据库的性能

Access 2003完整教程:排序疑难解答 (MDB)Access 2003完整教程:自定义交叉表查询
Access 2003完整教程:控件的疑难解答Access 2003完整教程:有关筛选的疑难解答 (ADP)
Access 2003完整教程:HTML 格式文件疑难解答Access 2003完整教程:共享数据库疑难解答 (MDB)
Access 2003完整教程:宏疑难解答Access 2003完整教程:报表的疑难解答
Access 2003完整教程:导入和链接的疑难解答Access 2003完整教程:安全机制疑难解答 (MDB)
Access 2003完整教程:Visual Basic 代码安全机制疑难解答 (MDB)Access 2003完整教程:表达式疑难解答
Access 2003完整教程:密码疑难解答 (MDB)Access 2003完整教程:Access 项目疑难解答 (ADP)
Access 2003完整教程:查询疑难解答 (ADP)Access 2003完整教程:复制、转换和链接到 SQL Server 数据库时的疑难解答 (ADP)
Access 2003完整教程:键、关系和索引疑难解答 (ADP)Access 2003完整教程:表和列疑难解答 (ADP)
Access 2003完整教程:“升迁向导”疑难解答Access 2003完整教程:更新数据疑难解答 (ADP)
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号