我们有一个针对公司服务器上的访问数据库编写的Windows MFC应用程序。数据库不是那么大:19 MB。一次最多有2-3个用户访问它。它用于工厂环境,其中内部网上的访问速度(或缺乏访问速度)变得明显,因为它是我们的小部件的制造时间的一部分。
场景是这样的:当每个窗口小部件完成时,它在数据库中获取记录..到年底,数据库更大,搜索记录的时间越来越长。到目前为止,解决方案是每年一次手动将旧记录移动到档案表。
我们正在修改此应用程序的其他部分,如果我们要这样做,那么现在是转移到另一个数据库的好时机。
据我了解,如果我们使用sql,搜索时间不会随着表变大而上升,因为每次都不需要通过网络发送整个.mdb。它是否正确?有没有人知道是否值得去迁移到新数据库的麻烦(时间和金钱),或者我应该只为我们现在的应用程序添加更多功能,并且可能会自动清除旧记录不时,并在应用程序中添加其他工具以在需要时获取旧记录?
感谢您分享的任何智慧......
答案 0 :(得分:4)
由于您的数据库很小且用户很少,我无法为迁移做出坚实的理由。我肯定会设置一个脚本来更频繁地存档旧记录(不要存档到同一个数据库中,这有点会破坏目的)。
但也要确保两件事情也是正确的。
在简单的问题上投入先进的技术是一种昂贵的方法,并不总是答案!
答案 1 :(得分:4)
首先,整个表和整个数据库通过网络传输的信息完全不正确。如果查询被编入索引,则搜索时间不应该随着时间的推移而增加。
正如其他人提到花费时间+金钱来设置和维护,然后让某人维护和管理并支持数据库服务器肯定是可能的。但是,请记住,在许多情况下简单地将基于JET的应用程序迁移到sql server将运行得更慢,实际上,当没有涉及网络时,sql server比JET慢。
所以,我会花一些时间来确定为什么事情会变慢,并检查索引是如何设置的。
所以,请记住,整个表格和整个数据库都是通过网络传输的,这是纯粹的民间传说和神话。这个概念仅限于大多数人没有接受任何计算机培训,也不了解和理解JET数据引擎的工作原理。
答案 2 :(得分:3)
如果有资金和时间放入数据访问层,我可能会迁移到Microsoft SQL Server 2008 R2 Express Edition(免费)或MySQL(免费)。因为您将提出远程服务器的请求而不是在本地工作站上对数据进行操作,所以从开发的角度来看,此举非常复杂。
但是,您应该分析每季度或每月执行归档过程的成本效益,并将归档数据库移动到SQL Server 2008 R2 Express Edition。 (您可以在工作站上安装Microsoft SQL Server Management Studio客户端工具并查询存档数据库以获得更快的历史数据报告,而无需重写整个生产应用程序;使用MySQL或其他OSS /免费RDBMS的类似解决方案。)
答案 3 :(得分:3)
我有300 MB的数据库,但由于其他原因他们应该升级到SQL Server。 19 Mb相对较小。如果性能足够糟糕,归档可以加快速度,那么请检查所有排序和选择字段的索引。阿尔伯特给了你一个很好的网址来检查。
整个MDB文件都没有下线。除非您缺少索引。
答案 4 :(得分:2)
不是通过网络将数据库传送到客户端然后执行查询,而是可以在处理请求的服务器上编写一个小包装器,在Access数据库中查找结果(使用SQL + Access ODBC驱动程序) ,并返回结果。这可以避免您可能不需要的大型迁移的开销,并且仍然可以摆脱用户遇到的基本问题。
转向“正确”的数据库解决方案是最好的长期解决方案,但如果您的需求在未来30年内线性且缓慢地扩展,则很难证明昂贵的迁移是正确的。也就是说,如果您希望真正提升,或者希望更加“面向未来”,那么现在迁移可能会节省资金/时间。
答案 5 :(得分:0)
我的理解是,如果我们是 使用sql,搜索时间不会 随着桌子越来越大,因为 整个.mdb不一定是 每次都通过网络发送。是 这是正确的吗?
几乎所有数据库都适用这种一般概念。数据库的想法是将应用程序与实际数据分开。数据驻留在数据库服务器中。你的申请没有。
有没有人有任何见解 是否值得去 麻烦(时间和金钱) 迁移到新的数据库
是。已多次提出此建议。它的价格昂贵。情况很复杂。您的MS-Access数据库永远不会变得更好或更快。
其他数据库服务器将(并且可以)变得更快,更复杂。毕竟,你不再通过网络发送.MDB文件了。限制减少了。您正在通过ODBC使用标准SQL。任何数据库都将在ODBC结束时工作。您可以解雇供应商以寻找更好,更快,更便宜的产品。一旦停止使用Access,您就有了选择。
立即停止使用Access或计划永久使用Access。每年重新制定这个决定,直到时间结束。