存储过程是否增强了访问数据库的性能,为什么?

时间:2012-03-05 12:39:30

标签: performance ms-access stored-procedures

哪一个增强了Access中的性能:

  • 有存储过程
  • 用VB代码编写查询
  • 或在我们的控件属性的数据源中编写查询

    逻辑上,第一个应该提高性能,但在这里我读了另一件事。你的意思是什么?

你可以请技术解释我或给我一个参考?

2 个答案:

答案 0 :(得分:2)

如果您正在谈论MDB文件,那么您必须使用“存储过程”来引用已保存的查询。保存的查询可以比内联SQL更快地执行,因为查询计划与查询一起存储;当您执行内联SQL时,必须将SQL编译为查询计划。

如果您在控件的DataSource属性中编写查询,Access会创建一个隐藏的已保存查询,因此性能应该相似。

更一般地说,您是否因为您或您的用户观察到性能不佳而问这个问题?如果是这样,性能在哪里差?这些信息可能有助于我们提出改善绩效的良好机会。

例如,假设您的表单是订单表单,并且您有显示客户名称和地址的文本框。表单的记录源是[Orders]表。名称文本框具有作为其控制源

SELECT [CustomerName] FROM [Customers] WHERE [CustomerID] = [CustomerIdTextBox]

同样,地址文本框的控制源:

SELECT [Address] FROM [Customers] WHERE [CustomerID] = [CustomerIdTextBox]

在这种情况下,您可以通过更改记录来源显着提高您的表现:

SELECT [Orders].*, [Customers].[CustomerName], [Customers].[Address]
FROM [Orders] INNER JOIN [Customers] ON [Orders].[CustomerID] = [Customers].[ID]

然后将名称文本框的控件来源更改为[CustomerName],将地址文本框更改为[Address]

为什么这会更快?在第一个设计中,您有两个查询(或者更确切地说,是对您从[Customers]表中提取的每个项目的查询)。在新设计中,您只有一个查询。

另一方面,如果您因为理论上认为一种方法可能比另一种方法更快而询问性能,那么您应该使用最简单的维护方法。如果您无法观察到性能上的差异,那么使用性能更高的解决方案就没有任何好处。

答案 1 :(得分:1)

仍然需要执行存储过程。在Access中,它必须在您自己的计算机上执行,使用常规DBMS仍然需要在服务器上执行。哪种方法更有效取决于您正在解决的问题。