本地ADO访问速度慢,远程ADO访问速度快,求高手解答

sangxiao 2010-11-10 09:09:40
现象:本地ADO访问速度慢(在本地用MYSQL的客户端执行同样的SQL语句速度很快的),但是远程ADO访问速度快,求高手解答。
...全文
149 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero_ 2010-11-10
  • 打赏
  • 举报
回复
在你的查询语句前后把时间打出来,看看本地访问的时候时间开销多大,远程ADO访问本机时候查询开销也都打出来。
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wwwwa 的回复:]

你在MYSQL中运行你的SQL语句,看看速度如何
[/Quote]
在MYSQL中速度很快的
WWWWA 2010-11-10
  • 打赏
  • 举报
回复
你在MYSQL中运行你的SQL语句,看看速度如何
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
有没有可能是数据库什么参数配置有问题?
我现在用的全部是默认配置
zuoxingyu 2010-11-10
  • 打赏
  • 举报
回复
你另外起一个工程试试。我这里没有这样的情况。
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zuoxingyu 的回复:]

你单步调试一下看,是本地的数据库连接慢,还是查询慢?
[/Quote]

本地的数据库连接很快
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zuoxingyu 的回复:]

gDBConnString = "Driver={MySQL ODBC 5.1 Driver};Server=192.169.1.100;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;“
[/Quote]
这个我也试过了,一样的,本地很慢,其他机器很快。
zuoxingyu 2010-11-10
  • 打赏
  • 举报
回复
你单步调试一下看,是本地的数据库连接慢,还是查询慢?
zuoxingyu 2010-11-10
  • 打赏
  • 举报
回复
gDBConnString = "Driver={MySQL ODBC 5.1 Driver};Server=192.169.1.100;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;“
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acmain_chm 的回复:]

不要使用DSN,直接用
gDBConnString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;“
[/Quote]
你好,这个还是很慢,没有明显的变化.
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
谢谢,我试试。

但是我的客户端程序不一定是在本机运行,还需要在局域网的其他机器执行,这个问题怎么解决呢?
ACMAIN_CHM 2010-11-10
  • 打赏
  • 举报
回复
不要使用DSN,直接用
gDBConnString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;“
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
Dim rst As New ADODB.Recordset
Dim iSQL As String
On Error GoTo ErrDB
iSQL = "Select Computer.*,SysCode.SysName From Computer,SysCode where Computer.PCType=SysCode.SysCode And SysCode.SysCodeType='PCType' Order by Computer.PCCode"
rst.Open iSQL, gDatabase
sangxiao 2010-11-10
  • 打赏
  • 举报
回复
Public Function ConnDB() As Boolean
gDBConnString = "DSN=fasclient;Password=passwd;User ID=fas"
ConnDB = True
If gDatabase.State = adStateClosed Then
Err.Clear
On Error Resume Next
gDatabase.ConnectionString = gDBConnString
gDatabase.CursorLocation = adUseClient
gDatabase.Mode = adModeUnknown
gDatabase.Open
If Err Then
ConnDB = False
End If
Err.Clear
End If
End Function
ACMAIN_CHM 2010-11-10
  • 打赏
  • 举报
回复
你的连接代码是什么?
ACMAIN_CHM 2010-11-10
  • 打赏
  • 举报
回复
综合你提供的信息。

1. 本地直接通过MYSQL命令行工具,速度很快。
2. 通过ADO,同样的代码访问远程的MYSQL数据库很快。
3. 通过ADO,访问本好的MYSQL数据库很慢。

可能的原因。
检查一下你本地的MYSQL版本和远程上的是否相同。
检查你的MYSQL的驱动,如果本地和远程版本不同的话。
检查你的网络。 你访问远程,同一个数据集的数据流(假设1000字节)只需要从远程服务器发回,你的网卡上只需要收1000字节。而你从本地访问则需要 本地MYSQL发送1000字节,然后本地收1000字节。 这种情况会出现在你的MYSQL和驱动的连接设置上。一般情况下相同机器的IP通过会直接BYPASS而不会通过实现的网络传输。
Middle ADO System 三层ADO的Internet远程数据库访问开发套件 获得最新版本: http//midado.cn 特点: 1、完全兼容Borland ADO Component的控件开发 从TCustomADODataset和TCustomADOConnection类继承,可速从已完成或者开发中的程序进行升级和扩展 2、完全的三层架构 同时支持原生ADO访问模式和三层的扩展访问模式,开发过程同C/S模式一样,运行时设定Enabled属性,即可从C/S变成三层,随时切换模式。 3、后台自动连线机制 客户端在长时间使用过程中,如果网络异常断线,恢复后可继续使用业务功能,不用重新启动应用程序,更加适合在不稳定的网络环境中使用。 4、自动断线功能 客户端长时间不进行操作,服务端可暂时断开客户端连线,当用户需要继续操作时,通过后台自动连线功能,重新连接网络继续操作,对用户的操作没有任何影响。自动断线功能可充分利用系统资源,减少同时在线用户,同时保障每个用户的连接质量。 5、数据库共享连接池 多个客户端共享同一个数据库连接对象,可设定每个客户端独占数据库连接对象时间和自动回收时间。 大量减少数据连接数量,减少数据库的负载,极大提高数据库访问速度。根据设定的缓冲时间,可节约80%~95%连接对象资源 6、多数据库目录支持 一个中间层服务程序可同时提供多个数据库目录的服务,提供多个应用系统的多套数据连接并发服务 7、安全的Internet网应用 通过TCP/IP服务程序,提供Internet的外部数据访问功能,通过服务程序,隔离数据库的直接连接,有效保护数据库安全, 高效的数据压缩和加密传输,提高远程的数据访问速度和安全性。 8、服务端状态监控功能 对服务器的连线和负载状态进行实时监控,可查看每个客户端连接的来源和请情况,包括数据的收发字节数 9、便于安装和维护 客户端不用装任何客户端数据库驱动和设置数据库连接对象,大量不同的客户端环境中进行客户端数据库连接设定,是需要花费不少人力。(例如Oracle) 使用场合: 1、需要安全的通过Internet远程数据库访问应用程序,如连锁加盟、各地办事处、等分布式应用 2、需要隔离数据库访问的高安全应用程序,例如在线实时交易软件、如股票证券、期货、外汇等交易等 3、大量客户端同时访问的应用程序,例如几千个用户同时连线对数据库造成重大负载的应用。 4、受到正版数据库软件用户连接数的限制,需要用少量许可提供更多客户端服务的应用。例如,10个许可提供给50个用户同时使用。
ADO组件的使用需要利用支持COM的高级语言,例如ASP中的VBScript或者Visual Basic,甚至Delphi,微软的竞争对手Borland的一个产品,现在也支持使用ADO来访问数据库。   在新的编程框架.NET Framework中, 微软也提供了一个面向Internet的版本的ADO,称为ADO.NET。其对象模型和传统ADO差别很大。 ADO是一种面向对象的编程接口,微软介绍说,与其同IBM和Oracle提倡的那样,创建一个统一数据库,不如提供一个能够访问不同数据库的统一接口,这样会更加实用一些。为实现这一目标,微软在数据库和微软的OLE DB中提供了一种“桥”程序,这种程序能够提供对数据库的连接。 开发人员在使用ADO时,其实就是在使用OLE DB,不过OLE DB更加接近底层。ADO的一项属性远程数据服务,支持“数据仓库”ActiveX 组件以及高效的客户端缓存。作为ActiveX的一部分,ADO也是COM组件的一部分。ADO是由早期的微软数据接口??远程数据对象RDO演化而来的。RDO同微软的ODBC一同连接关系数据库,不过不能连接非关系数据库。   ADO向我们提供了一个熟悉的,高层的对OLE DB的Automation封装接口。对那些熟悉RDO的程序员来说,你可以把OLE DB比作是ODBC驱动程序。如同RDO对象是ODBC驱动程序接口一样,ADO对象是OLE DB的接口;如同不同的数据库系统需要它们自己的ODBC驱动程序一样,不同的数据源要它们自己的OLE DB提供者(OLE DB provider)。目前,虽然OLE DB提供者比较少,但微软正积极推广该技术,并打算用OLE DB取代ODBC。   ADO向VB程序员提供了很多好处。包括易于使用,熟悉的界面,高速度以及较低的内存占用(已实现ADO2.0的Msado15.dll需要占用342K内存,比RDO的Msrdo20.dll的368K略小,大约是DAO3.5的Dao350.dll所占内存的60%)。同传统的数据对象层次(DAO和RDO)不同,ADO可以独立创建。因此你可以只创建一个"Connection"对象,但是可以有多个,独立的"Recordset"对象来使用它。ADO针对客户/服务器以及WEB应用程序作了优化。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧