我正在使用MS Access在本地SQL服务器上的表中插入100条记录。
当我的PC通过以太网连接到服务器时,APPEND查询将在不到一秒钟的时间内运行。
当同一台PC通过WiFi路由器连接到该服务器时,将花费30秒以上。
详细信息:
PC:运行Win10的Core7 8G RAM,已安装所有更新。
MS Access:已安装所有更新的Ms Access 2003。我也尝试过MS Access2010。APPEND查询为:
INSERT INTO dbo_tableA ( A, B, C ) SELECT tableB.X, tableB.Y, tableB.Z FROM tableB;
这些表仅包含3个索引整数和一个键字段。没有计算字段,数据库已压缩。使用代码docmd.runsql时,结果相同。通过WiFi进行SELECT查询的速度很快。
服务器:Xeon 8G RAM运行在带有SQL 2005的Windows Server 2003上,并安装了所有更新。没有其他用户连接。
网络:WiFi路由器包括一个多端口交换机。服务器直接连接到此交换机。
目前没有人连接到Wifi。这是5Ghz 802.11n。 在以太网端口上运行时,speedtest.xfinity.com的下载速度为27Mbps,上传的速度为6Mbps,在WiFi上的结果相同。
非常感谢您的答复。
答案 0 :(得分:1)
简短的答案是,永远不要运行后端通过WiFi连接的拆分数据库。始终使用有线连接。
原因是,WiFi连接可能会出现令人讨厌的中断,而数据库引擎从未中断过中断,并且也不是专为该中断而设计的。实际上,如果使用WiFi,您的后端很可能迟早会损坏。
如果必须使用Wifi,请将前端安装在与后端有线连接的终端服务器上,然后使用 Remote Desktop 运行前端。
答案 1 :(得分:1)
这不是一个“答案”,而是一些调试提示。这个问题确实涉及到问题,因为它涉及大量的调试工作,但是我有一些提示时间太长,无法发表评论。
现在,我看到[tableB]
位于正在插入SQL Server的Access DB中。 Access可能会生成许多单独的语句来一对一地插入数据行,而不是执行在SQL Server上执行的单个查询。既然SQL Server无法看到Access表并且没有用于插入多个值的Access SQL语句,那么该怎么办呢?
要查看实际情况,建议使用ODBC Tracing。从该网页尚不清楚,但是如果您安装了用于连接到SQL Server的ODBC驱动程序,则将安装实用程序“ ODBC数据源管理器”。只需单击“开始”按钮,然后键入“ ODBC ...”,它应该显示“ ODBC数据源(32位)”,并可能显示“ ODBC数据源(64位)”。仅使用32位,因为Access将仅使用那些驱动程序。按照其他说明捕获所有发送到服务器的SQL命令。
我现在建议的唯一解决方法是使用VBA生成您自己的多语句Transact-SQL文本,然后使用ODBC Direct将其发送到服务器。这将避免过多的语句生成和对Access的处理。要“正确”(即以最有效,最安全的方式)执行此操作,需要了解Transact-SQL,创建和处理服务器事务,直接访问SQL表与参数化过程等。