MS 通过 odbc 访问 mySql 连接慢

Posted

技术标签:

【中文标题】MS 通过 odbc 访问 mySql 连接慢【英文标题】:MS Access to mySql connection via odbc slow 【发布时间】:2020-08-04 18:54:40 【问题描述】:

我希望如果有人可以帮助我解决这个问题, 我已将我的 MS 访问数据库拆分为 mysql 服务器,并通过 odbc 驱动程序连接,并直接连接我的 ms 访问表。 当我在本地网络上打开我的 ms 访问前端时,它的速度很好,但是当我通过互联网连接时速度太慢,打开并显示查询需要 2-3 秒。我的网速非常好, 我很惊讶我可以打开远程桌面并通过它以更快的速度打开 ms 访问。 odbc 的跟踪已关闭 请让我知道是否存在并且需要在 vba 上编写编码而不是直接连接。请指导我不是专家。 提前谢谢你。

【问题讨论】:

如果您的连接速度太慢,请使用远程桌面。 【参考方案1】:

那么,与您的本地办公室 LAN 相比,互联网连接的速度是多少?

即使是当今最便宜的办公网络也是 1000T。以前是100T,以前是10T。

所以,这是非常简单的三年级数学。

假设您的互联网是 15 兆比特。哎呀,可以说它是50mibts。但话又说回来,那是你的下载速度!!!当您点击工作服务器时,THAT END 会受到其上传速度的限制。即使有一个好的计划,上传速度也是有限的。

那么,让我们做一些三年级的数学题吧。让我们假设您的 iternet 连接是 50 兆比特(这可能是一种方式 - 但我非常怀疑您的上传速度被评为那么好。

所以,1000/ 50 = 20!

哇!!!慢了 20 倍!

好的,现在我们要问: 为什么慢 20 倍的连接速度会慢 20 倍?正如荷马辛普森所说的那样?呵呵!!!

所以,现在 4 秒的延迟是 80 秒!!!但是话又说回来,我真的怀疑您是否有任何接近 50 mibts 连接的东西 - 当您访问服务器时,您会受到下载速度的限制,因为您从该服务器中提取。所以现在你仅限于上传速度。说,15 米比特。好的,让我们再做一些三年级数学:

1000 / 15 = 66!

好的,现在我们慢了 66 倍。现在 5 秒的延迟将是 5 x 66 = 333 秒(或五分半钟!)。

所以: 不,您的互联网连接可能很快 - 但您将该速度与什么进行比较?因为如果您将其与您的 el-cheap 办公网络进行比较,其评级为 1000T?好吧,那么您甚至都没有关闭,而且从所有标准来看,您的互联网连接都不是很快!

我的意思是你可以走得很快,但开车是一个非常不同的过程。

当然,您可以做的一件事是确保访问表单不会提取大量数据。

那么,如果您将一个表单链接到一个有 500,000 行的表格?

好吧,如果您只是启动表单?然后它将开始提取数据。毕竟,它只会做你告诉 Access 去做的事情。

但是,如果你这样做:

dim strInvoiceNum = InputBox("What invoice number")

docmd.OpenForm "frmInvoices",,,"InvoiceNum = " & strInvoiceNum

现在,同一个表单绑定到 500,000 行的链接表?只有一行会从网络管道下来。因此,良好的性能主要是良好设计的问题。如果您的设计告诉 Access 将大量数据提取到表单中?然后你非常注意到减速。但是您以前从未注意到它,因为与办公室 LAN 的 50 倍或更多的连接速度相比,您不必担心互联网连接非常有限。

所以,因为你以前的速度这么快,所以你从来不用花时间担心你在表单中提取了多少数据,因此你不在乎。

现在,在上面,我使用了输入框,但在一个典型的访问应用程序中,您将构建 NICE UI 和漂亮的表单,提示用户要做什么。

这与谷歌的工作方式并没有什么不同。您无需将整个 iternet 下载到浏览器中,然后按 ctrl-f 来搜索包含大量数据的巨大页面。您所做的是提示 - 搜索,显示一些结果,然后让用户选择结果。

然后您使用“where”子句启动表单。那么,即使是 100% 直接绑定到大表的表单?如果你用 where 子句打开它?它只从网络管道中拉出 1 条记录或多条记录。

所以,你可以说构建一个这样的搜索表单:

我输入了 smi。 所以,在文本框的更新后事件中,我去:

me.RecordSource = "select * from tblCustomers where LastName like '" & ttextbox & "*'"

当用户点击结果时?我使用 where 子句将表单打开到 ONE reocrd:

例如:

Docmd.OpenForm "frmBooking",,,"ID = " & me!id

那么,即使我正在搜索的表有 100,000 甚至一百万行?好吧,拉 30 条记录,还是点击一行?好吧,上面将表单打开到一行(即使表单直接绑定到巨大的表,这也是如此 - 仅拉出 ONE 行)。

事实上,无论是会计软件包、谷歌还是您曾经使用过的任何软件?表单不会拉下整个表格,然后让您使用 ctrl-f 搜索您无缘无故拉下的巨大数据集。

即使使用 Access 作为后端文件共享?典型办公网络上的 5 个用户应该会产生 BLISTERING 性能。但是,一旦您在 Access 和后端之间采用 *** 或 Internet 连接?好吧,那么后端不能是文件accDB(访问一)。原因是文件共享网络对于互联网速度来说往往太慢。

但是,如果您对 Access 和基于服务器的后端采用上述性能提示?那么是的,您可以获得相当不错的性能 - 但前提是您的开发人员花一点时间限制您提取到此类表单中的数据。

不管怎样? 基于简单的三年级数学?与在访问和后端数据库之间引入 Internet 之前的连接相比,您根本没有快速连接。

【讨论】:

嘿,感谢 Albert 提供了这么好的提示并花费您宝贵的时间回答问题,我很感激。

以上是关于MS 通过 odbc 访问 mySql 连接慢的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能从我的用户锁定我的 MS-SQL 数据库,但仍然通过 ODBC 访问它?

删除/编辑 MySQL ODBC 链接表中的行导致 MS Access 出错

无法使用 MS Access 2007 访问 ODBC DB

从 MS Access VBA 通过 ODBC 进行 MySQL 查询:ADODB 异步执行不起作用

ODBC 连接凭据如何存储在 MS Access 中? [关闭]

MS Access + ODBC 8.0 + MySQL 某些字段显示前 10 行 =0,尽管 MySQL 显示其他值