2012-03-05 56 views
1

在访问的性能哪一个enhace:确实存储过程提高了数据库的性能,为什么?

  • 具有存储过程
  • 写在VB代码
  • 我们的查询或写入我们的查询在数据源我们的控制财产的

    logicaly第一一个应该提高表现,但在这里我读了另一件事。你是什么意思?

请问你能解释我技术还是给我一个参考?

回答

1

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

+0

谢谢你的回答,让我解释一下我scnario一点点更详细: 我有一个包含10个控制和这些控制充满了他们的查询表格(他们只是简单的SELECT查询)的形式加载时。 – Baper 2012-03-05 12:51:20

+0

听起来不像任何*附近*什么东西需要存储过程。你需要解决一些问题吗? – alexis 2012-03-05 12:57:19

+0

表现,我想提高我的表现 – Baper 2012-03-05 13:40:55

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]表中抽取的每个项目的查询)。在新设计中,您只有一个查询。

如果,另一方面,则是问有关性能,因为理论上的想法,一个方法可能比另一个快,那么你应该使用最简单维护的办法。如果您无法观察性能差异,则使用更高性能的解决方案没有任何好处。

相关问题