插入更新删除时,通过 ODBC 到 MS Access 的 mysql 链接表表现不佳

标签 mysql performance ms-access odbc

我有一个 MS Access 应用程序,它通过 ODBC 链接 mysql 表。 mysql 数据库曾经位于同一个 LAN 中并且性能非常好,但被外包到具有 100Mbs 连接的不同位置。 版本:

CentO:6.7

Mysql:5.6.26

MS access:2010(也在 ms access 2003 中进行了测试)

ODBC:Windows 7 PC 中的 5.3 unicode 驱动程序版本

我测试了一个myIsam表和一个InnoDB表,有3个字段,第一个是作为PK的整数类型。

test_localTable是在ms access中创建的本地表,有30行

-> 从 ms access 查询中使用此命令:

insert into mysqlInnoDb_remoteTable select * from test_localTable

insert into mysqlMyIsam_remoteTable select * from test_localTable

delete * from mysqlInnoDb_remoteTable

delete * from mysqlMyIsam_remoteTable

innodb 和 myIsam 表平均插入时间为 10 秒,删除时间为 11 秒。更新也是如此。

有趣的是,任何类型的选择查询都可以像我在本地使用服务器一样快地运行。

我认为我的服务器缺少一些重要的调整,因为我认为这种性能 Not Acceptable 。

你能帮我一下吗?

谢谢

最佳答案

在某些情况下,当对 ODBC 链接表执行单个 Access SQL 语句时,Access 实际上会为每一行发送一个 native SQL 语句。如果您要在 MySQL 服务器上启用 General_log,您会不幸地看到 Access SQL 语句

INSERT INTO LinkedTable ... SELECT ... FROM LocalTable

DELETE * FROM LinkedTable

有两个这样的案例。

在处理大量行和/或缓慢连接时,可能需要使用涉及传递查询的解决方法。例如,假设您在 Access 中有一个名为 LinkedTable 的 ODBC 链接表,它指向名为 RemoteTable 的 MySQL 表。如果

Dim cdb As DAO.Database
Set cdb = CurrentDb
cdb.Execute "DELETE * FROM LinkedTable"
Set cdb = Nothing

事实证明太慢了,那么这可能会快得多

Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("")
qdf.Connect = cdb.TableDefs("LinkedTable").Connect
qdf.SQL = "TRUNCATE TABLE RemoteTable"
qdf.ReturnsRecords = False
qdf.Execute
Set qdf = Nothing
Set cdb = Nothing

可以在相关答案 here 中找到 INSERT ... SELECT 的类似解决方法。 .

关于插入更新删除时,通过 ODBC 到 MS Access 的 mysql 链接表表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637958/

相关文章:

php - 在 php 浏览器中重启 mysql,权限问题?

mysql - Django 从 MySQL 迁移到 Postgres

php - MySQL 查询返回的结果比预期的要多

javascript - 将类似 Minecraft 的 map 存储为 JavaScript 数组

python - 有效计算 Python 正则表达式匹配

ms-access - Access VBA 代码以打印每条记录的单个 PDF - 在第 10 条记录处停止

MySQL 语句——模式匹配等

python - 使用Python对图像使用最大似然算法进行分割

ms-access - 基于 Access 中保存的 SELECT 查询更新查询?

r - 带有 Access DB 的 R 中的 ODBC 是否存在任何语言问题?