MS Access问题 - 可伸缩性/索引/事务

时间:2008-10-07 18:34:29

标签: ms-access rdbms

关于MS Access数据库的一些问题 -

大小:访问数据库的大小是否有限制?我问的原因是我们有一个具有几个简单表的访问数据库。 db的大小约为1GB。当我对它进行查询时,我发现它需要花费10多分钟才能运行。

通过适当的索引,MS Access是否能够处理此问题,或者是否存在技术的基本限制。

这是MS Access XP。

此外,MS Access是否支持数据库事务,提交和回滚?

8 个答案:

答案 0 :(得分:4)

您将在此处获得许多不同的答案,但在MY OPINION中,访问权限并不是可扩展的解决方案。它不能很好地处理多用户情况,因为你开始接近1Gb的大小,稳定性开始成为一个主要问题,而实际上它只是没有性能。

关于交易支持,请参阅this Microsoft Artic le。

此外,这篇文章实际上指出了limitations of access的绝大多数。

答案 1 :(得分:2)

回答 -

大小:Access数据库的最大大小为2GB。

事务:底层JET数据库引擎完全支持事务。

从过去的经验来看,我倾向于说你可能达到最大可用大小,并且应该考虑升级到SQL Server Express。

答案 2 :(得分:0)

就个人而言,我发现'可用'限制在几百兆字节范围内。

Access是专为小型数据库设计的。对于大型的,即超出你和几个人正在使用的东西,你应该看一个像“SQL Server,ORacle,DB2,MySQL等”的“真正的”RDBMS。

编辑 - 有关处理Access交易的方法,请参阅http://www.blueclaw-db.com/vb_transaction_processing.htm。显然它不是原生的。

答案 3 :(得分:0)

Access数据库的最大大小为2GB。您可以通过在其他文件中使用链接表来解决这个问题,但如果您遇到性能问题,则可能需要使用更强大的数据库。

我的建议是查看SQL Server Compact,这是一个免费的,基于文件的数据库,或者更好的是SQL Server Express,这是一个免费的“精简版” SQL Server将支持多个用户并与SQL Server进行互操作。两者都限制为4GB数据库。

所有提到的产品,包括Access,都支持交易。

答案 4 :(得分:0)

我不确定它们是否仍然存在于XP版本中,但在Access 97中,有紧凑和修复选项。如果这些仍然是选择,他们可能会有所帮助。

答案 5 :(得分:0)

虽然这可以追溯到多年前,当时进入SQL Server安装的成本与Oracle一样令人望而却步,但我的一个客户正在使用Access来尝试管理入站呼叫中心。

我们正在讨论VLDB非常大的数据库概念4000万行。这是在电话公司推出来电显示并为其订户提供接收免费来电显示设备的方式的时代。由于成本限制,他们不得不忽视我对SQL Server投资的请求。

在实践中,似乎Access大约800MB。我们将表分区为多个Access数据库来处理负载。信不信由你,它工作得很漂亮。客户很感激。

在实践中,考虑到SQL Express的可用性,我也建议走那条路。

答案 6 :(得分:0)

我多年来阅读Access新闻组的印象是,当使用MS Access作为使用绑定表单的基于RAD表单的开发环境时,仅建议使用ACE / Jet引擎(.accdb,.mdb或.mde文件)。如果您没有Access前端,那么在考虑更具可伸缩性(且能力强)的替代方案时,几乎没有支持ACE / Jet后端的参数:用于MS商店的SQL Server Express或SQL Server Compact Edition,MySQL,等。

作为ACE / Jet引擎中的reagrds事务支持,是的,它存在并且是本机的。另一个答案与关于通过DAO使用事务的文章有关:请注意,DAO的许多方面都是有限的,因为它的开发滞后于引擎和事务就是一个例子。令人高兴的是,您可以使用SQL DCL:BEGIN TRANSACTION,COMMIT TRANSACTION,ROLLBACK TRANSACTION等来完成DAO无法实现的功能,例如:嵌套事务。 SQL DCL要求Access接口处于ANSI-92查询模式;使用ADO将起作用,因为ADO本机使用此模式。有关更多详细信息,请参阅:

Advanced Microsoft Jet SQL for Access 2000

答案 7 :(得分:0)

对于任何数量的桌面开发平台,Jet都可以是一个非常好的数据存储,而不仅仅是Access本身。它一直是VB开发人员的首选,但仍然是(有充分理由)。

预计不会增长很多的1GB MDB在速度或可靠性方面不应该成为问题。如果它很慢,那么你没有正确编入索引,或者你编写效率非常低的SQL。低效SQL的一个例子是将WHERE子句应用于表达式,因此不能使用索引 - 例如

WHERE Year([MyTable].[MyDate]) = 2002

而不是

WHERE MyTable.MyDate Between #1/1/2002# And #12/31/2002#

如果您遇到稳定性问题(即反复出现的损坏),这是一个需要解决的问题 - 通常是由于人为错误,硬件问题或软件问题(如AV软件干扰内部Jet写入操作)

但关键的决定因素是MDB的增长速度。如果你推断出历史增长率并在5年内接近2GB,我会说你需要很快升级。如果它更像是10年,那你无论如何都应该这样做。如果是20年,那么,不是那么多。