MSAccess 移至 sql server 作为后端

Posted

技术标签:

【中文标题】MSAccess 移至 sql server 作为后端【英文标题】:MSAccess moved to sql server as Back end 【发布时间】:2013-03-08 22:16:30 【问题描述】:

我们正在将后端从 MSAccess 迁移到 Sql server 2008 R2 Express。 我们已将 MSAccess 查询更改为存储过程。 数据大约有 250,000+ 条记录。

我们在 MSAccess 的后端有两个可以变得非常大的表......PartsInventory_BE 和 Service_BE。

话虽如此,当我们测试大约 9,000 条来自 Access 前端与我们的 Access 后端对话的记录时。加载一个显示所有 9,000 条记录的表单需要 20-30 秒。有了这样的性能,我们做了一个变通,以便前端现在包含一个名为 PartsInventory 的相同表,该表持续同步 PartsInventory 和 PartsInventory_BE。

我们是否需要将这种样式用于 sql server 作为后端以保持/提高性能,如果是,那么如何?如果否,那么您还可以列出一些参考。

【问题讨论】:

真正的问题是:在应该在 BE 上的 FE 上执行什么需要完整 9,000 行记录集的操作?除非您要打印 150 页的报告,否则没有理由将 9,000 行(= 60 行/页 * 150 页)下载到 FE。 我有 45,000 多个库存项目,我想查看 1 种类型的库存(也包含一些详细信息)。加载一个显示大约 9,000 条记录的表单需要 20-30 秒跨度> 如果您想减少网络流量,您可以编写存储过程以在后端按类型过滤库存。但是 9000 条记录不算什么。我们通常会在亚秒级时间内通过网络将 25,000 条记录传送给客户端。无需在客户端维护表的镜像副本。 @faheem:除非您实际上是在打印 150 页的报告,否则您正在对应该与数据一起迁移到 BE 的 FE 进行聚合。正如您所注意到的,要使迁移正常工作,任何重要数据量的所有聚合都应该发生在 BE 上,而不是 FE 上。如果你不听从这个建议,你最终只会慢慢地将数据迁移到 FE。 否,过滤器未在客户端应用。如果您有一个绑定到一百万行表的表单并在客户端用一个简单的标准 where 子句打开它,那么只有一条记录被带入网络管道。所以不,过滤器根本不应用于客户端。我想如果一个人打开一个绑定到没有“where”子句的表的表单,那么一个人就是在自找麻烦,但是这些天没有人对大表这样做。因此,使用带有 where 子句的 open form 命令可以正确传递给 SQL Server,而无需传递或视图或存储过程。 【参考方案1】:

请记住,Access 允许您编写Pass-Through queries,它将向您的新后端发送 SQL 命令,并简单地返回结果。您可以像使用 Access 中的任何其他表或查询一样使用它。

如果您发现提取数据的时间过长,您可能需要考虑一下您的索引方案。要获取有关列和索引的信息:

List of all index & index columns in SQL Server DB

【讨论】:

以上是关于MSAccess 移至 sql server 作为后端的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 MS ACCESS 表执行 SQL Server 表的批量更新

MS Access 前端与 SQL Server 后端查询存储最佳实践 [关闭]

MS Access:来自 SQL Server 的只读链接表?

如何获取父子表(MS SQL Server/MSAccess)之间的参考信息?

我们 MSAccess 是不是可以通过 SQL Server 中的外部链接视图插入数据? [复制]

将 Access 表日期值作为参数传递给 SQL Server 存储过程