插入更新删除时,mysql链接表通过ODBC访问ms表现不佳

时间:2015-09-17 18:54:11

标签: mysql performance ms-access odbc

我有一个ms访问应用程序,它将mysql表链接到ODBC。 mysql数据库曾经在同一个局域网中,性能很好,但外包到一个100Mbs连接的不同位置。 版本:

CentOs:6.7

Mysql:5.6.26

Ms access:2010 (也在ms access 2003中测试过)

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

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

test_localTable 是一个以30行的ms访问方式创建的本地表

- >使用来自ms访问查询的命令:

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秒。更新也是如此。

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

我认为我的服务器缺少一些重要的调整,因为我认为这种性能不可接受。

你可以帮帮我吗?

谢谢

1 个答案:

答案 0 :(得分:2)

在某些情况下,当针对ODBC链接表执行单个Access SQL语句时,Access实际上会为每行发送一个本机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

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