ado连mysql,本机和腾讯云操作记录集耗时不同,不解
vb吧
全部回复
仅看楼主
level 7
tzchf 楼主
ado2.8,mysql5.7。取得recordset不一样可以理解,路远时间长。
但在已取得的记录集上操作,耗时差十几倍,为什么呢?
测试数据,行数50相当于50*50/2,大约1250次filter,10行10*10/2=50次,其它类推
taboo只一条记录,不是重点,关键的点我红框了
2026年01月25日 02点01分 1
level 7
tzchf 楼主
能解释的就是,腾讯云的是自研轻量数据库,全面兼容mysql,号称各种优化。我简化了代码试了下,差40倍。
2026年01月25日 14点01分 2
level 1
远程的话,游标 一定要设成 aduseclient,并且控制查询量(因为数据是一次输出)。更新的话,最好批量更新。
本机的话,则不一定需要(但数据是逐条输出到recordset中,一条数据弹出时间大概 0.0几毫秒)
2026年01月26日 02点01分 3
没想到拿到记录集,每次filter还要往返数据库。改成静态游标,解决。rst.Open "taboo", conn, adOpenStatic
2026年01月26日 03点01分
rst.CursorLocation = adUseClient更快,rst.open各种类型游标无差别。[大拇指]
2026年01月26日 07点01分
又发现设成客户端游标带来毛病,取得的字段值在vb里无法比较等于不等于=<>
2026年01月28日 01点01分
不可能。获取到的数据是在你的本机的内存中,而且ado.recordset是严格按 vb的数据类型来匹配的,百分百可以 比较。是你的代码有问题吧
2026年01月28日 04点01分
level 7
tzchf 楼主
调试显示rst("id")是1,但=1就出错
2026年01月28日 05点01分 4
level 1
mysql id 默认是一个 ulonglong 类型,你要么建表时设成 int(long),要么转成 string 或currency 来比较。赋值的话用 currency (8字节)类型去赋值。
2026年01月28日 08点01分 5
id是smallint,不相干,其它字段也一样。问题在aduseclient这句,没有就可以。
2026年01月28日 11点01分
回复 tzchf :那就先不要用 aduseclient。aduseclient使用应该是有条件的(需要loacationcusor for oledbdriver 支持,mdb和sqlserver 微软是支持的,mysql 是odbc,不是Oledb驱动),我现在没有 你的类似环境,只能猜测。游标在服务端才是常规状态,而且现在也很少 直接裸露 数据库端口。
2026年01月29日 00点01分
@滋阴壮阳冬瓜汤 aduseclient速度快,是有效的,不知道还会有什么问题发生。还是用默认的吧,打开用静态游标,也快的。
2026年01月29日 01点01分
level 1
mdb或accdb的id 是long大小,一般来说单表 2亿多条,足以应付95%的使用场景。如果实在需要ulonglong大小,那就两边转 variant,一边用VariantChangeType()函数去转数据类型,让两边的数据类型一致。把variant看成是一个 桥梁
2026年01月28日 09点01分 7
1