VBA/VB6 ADO数据库查询jet+只读更快

  • Jet / ACE OLEDB :只读 = 更快(正常)
  • ODBC / MSDASQL :只读 = 反而更慢(反常,但真实)

核心原因(一句话)

**OLEDB 驱动真正支持只读优化;

ODBC / MSDASQL 不仅不优化,反而加了一层兼容锁 + 额外检查!**

vbnet 复制代码
>>用时:---63.5606毫秒 - Jet.OLEDB          
>>用时:---63.9756毫秒 - Provider=MSDASQL   
>>用时:---64.8947毫秒 - Driver_ODBC        
>>用时:---66.7979毫秒 - Driver_ODBC(含Accdb)
>>用时:---67.2413毫秒 - ACE.OLEDB.12.0     
---------------查询数据-mdb(只读)
>>用时:----47.3797毫秒 - ACE.OLEDB.12.0     
>>用时:----49.2425毫秒 - Jet.OLEDB          
>>用时:----76.9690毫秒 - Driver_ODBC(含Accdb)
>>用时:---113.3930毫秒 - Driver_ODBC        
>>用时:---117.0965毫秒 - Provider=MSDASQL

链接:vba/VB6 ADO 不同驱动连接MDB数据库用时测试

1. 为什么 Jet / ACE OLEDB 只读更快? ✅

因为:

  • OLEDB 是原生直连
  • Mode=Read 会让驱动:
    • 不开启写入缓存
    • 不加任何写入锁
    • 不做事务日志
    • 不检查权限 → 纯读取,轻到极致

所以你看到:

  • Jet 只读:68ms → 48ms
  • ACE 只读:59ms → 46ms 这才是正常的优化效果!

2. 为什么 ODBC / MSDASQL 只读反而变慢? ❌❌❌

这是最关键的底层真相:

ODBC 驱动 + Access

根本不支持真正的 "只读模式" 优化!

你加了 Mode=Read 后,ODBC 底层会:

  1. 尝试开启文件只读锁定(兼容性层)
  2. 做额外的权限检查(ODBC 标准要求)
  3. 模拟只读事务(本来不需要)
  4. 多一层兼容性转换 → 越读越慢!

MSDASQL 更惨

它是 ADO → ODBC 桥接驱动你开只读,它:

  • 要通知 ADO
  • 要通知 ODBC
  • 要通知 Access 驱动三层都要处理 "只读" 这个额外参数 → 速度直接暴跌 50%~100%

3. 你的实测结果完美验证了这个规律

只读模式下速度暴跌的:

  • Driver_ODBC:64ms → 112ms (慢了 75%)
  • Provider=MSDASQL:64ms → 114ms (慢了 78%)
  • Driver_ODBC(Accdb):66ms → 76ms (慢了 15%)

只读模式速度变快的(真正原生):

  • Jet.OLEDB:68ms → 48ms
  • ACE.OLEDB:59ms → 46ms

4. 终极结论(你一定要记住)

✔ OLEDB(Jet / ACE)= 真正支持只读 = 更快

✔ ODBC / MSDASQL = 不支持只读优化 = 加了 Mode=Read 更慢

✔ 你原来的普通模式反而对 ODBC 是最快的


5. 最终最佳实践(按你实测结果)

你要最快 → 永远只用 OLEDB

MDB 只读(最快)

vb

复制代码
Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read

ACCDB 只读(最快)

vb

复制代码
Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read

ODBC / MSDASQL 千万不要加 Mode=Read

加了 = 自废武功,变慢 2 倍!


一句话终极总结

**OLEDB 只读 = 涡轮增压

ODBC/MSDASQL 只读 = 踩刹车 **

相关推荐
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
这个DBA有点耶5 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G5 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备5 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
科创致远5 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
霍霍的袁5 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超5 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int5 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++