mysql odbc ado性能差异_ODBC、OLEDB和ADO之间的关系 ,以及性能比较

学习了.net视频之后,对里面涉及到的数据库连接部分中的一些概念表示很无语。网上很多相关资料,但除了网站不一样外,基本上内容都神一样的一致。

现在,我就通过结合看到的一些资料再加上自己的理解试图去解释一下,有不对的,还请大家指教!

看一张图:

e8578b318a0beade610edc9e8f8a1e35.png

看图中右半部分,我们先来了解一下ODBC这个概念。

1.ODBC:

要了解ODBC是什么,先了解一下数据库连接的相关知识。其实,在最开始连接数据库时,由于数据库种类繁多,各种数据库连接有不同的需求,这个时期,数据库连接主要依靠各种API函数来进行连接。而ODBC就是将这些API函数封装起来形成统一的接口如上图所示(ODBC上方有一个唯一的接口)。图中所示的ODBC层代表ODBC中各种数据库的驱动器(driver),当SQL语句进入接口后,驱动器管理程序通过辨别将它们分别对应的进入各自的驱动器(driver),由驱动器来讲SQL语句送入各种不同的数据库。

不知道上面这样写,有没有把这个ODBC给介绍的明白一点儿,学习要生活化,这样才容易理解。我来举个例子。

我们把ODBC假想成一辆汽车,汽车中有一名司机(driver),把下面的各种数据库假设程不同的工厂。如果司机接收到接口中的命令(SQL语句)——将汽车上的货物运到某个工厂中。那么司机(driver)会根据命令中所指明的货物的类型,自己去辨别到底应该进入哪个工厂才能完成任务。

大家看,上面这个例子中接收的命令就好像是数据库中的SQL语句,那么司机就好像是驱动器(driver),而不同的工厂就好像是不同种类的数据库。这样理解,有没有简单一点儿呢?

2.OLEDB与ODBC

好了,再来看一下OLEDB,在上面的例子中我们理解了ODBC,还有我们必须知道,ODBC负责的只是结构化数据库的连接。这样我们就会比较容易理解OLEDB。

OLEDB其实和ODBC类似,都是负责数据库连接的低级接口。而OLEDB不仅支持结构化数据库如SQL server,Oracel Access等,而且还支持非结构化数据源的连接如EXCEL等。

OLEDB(对象连接和嵌入数据库),是一组对象的集合,一种读写数据的方法。在使用OLEDB时,使用步骤为:初始化OLE、连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE。他可以通过ODBC连接到数据库,也可以之间连接到数据库。当不通过ODBC时,这时在这其中并不涉及到驱动器的成分,因此,此时的数据库连接速度会更快。同时,我们可以知道,只要支持ODBC的数据源是一定能够支持OLEDB的。但是反过来则不一定。

3.ADO

通过图中,我们看到ADO是位于应用程序和OLEDB之间的。它属于数据库连接中的高层接口。

是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。

如何理解上面这个概念呢?其实我们可以联系我们学到的关于ADO控件的相关知识。在原来学习VB的时候,我们如果想要连接到数据库的话,必须加载一个引用空间,里面含有connection,command,recordset等一些相关数据库连接的对象,其实这个引用就是ADO。我们通过这些对象建立对数据库的连接,我们只需编写访问数据库的代码,而并不用关系数据库是如何实现的。

看完了三者的关系,让我们来看看他们操作数据的速度如何,以打开access为例

性能对比:

sql access

oledb dsn oledb dsn

时间      18 82 62 99

查询1,000条记录: 100 150 2900 5400

显然,oledb链接方式相对于dsn有很大的优势.购买虚拟主机的小站,大多是php+mysql或者asp+access的组合,一般没有dsn数据源的配置,而且我们也不需要.同时mssql是一种昂贵的数据库,如果使用效率低下的access,我们应该尽量的减少数据库引擎的压力.我经常看见一些站点给出提示:数据库连接失败,显然,又是access出毛病了.

常用的连接access的办法:

oledb

openstr="provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)

odbc

openstr="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.Mappath(db)

这两者在性能上也有一定的差别.下面是一个测试文件,对两者进行比较.

dim openmode,action,db,openstr,rs,conn

openmode=request.QueryString("openmode")

action=request.QueryString("action")

db="#niceidea.mdb"

set conn=server.createobject("adodb.connection")

if penmode="oledb" then penstr="provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)

if penmode="odbc" then penstr="Driver={Microsoft Access Driver (*.mdb)};DBQ=" &Server.Mappath(db)

Dim strStartTime

Dim strEndTime

strStartTime = Timer ''''''''''''''''''''''''''''''''开始时间

''''''''''''''''''''''''''''''''反复打开数据库50次

if action="open" then

for i=1 to 50

conn.open(openstr)

conn.close

next

set conn=nothing

end if

''''''''''''''''''''''''''''''''移动记录集10000次

if action="move" then

conn.open(openstr)

set rs=conn.execute("select * from visitor")

for i=1 to 10000

rs.movenext

next

rs.close

set rs=nothing

conn.close

set conn=nothing

end if

''''''''''''''''''''''''''''''''反复打开记录集1000次

if action="getrs" then

conn.open(openstr)

set rs=server.CreateObject("adodb.recordset")

dim sqlstr

sqlstr="select * from visitor"

for i=1 to 1000

rs.open sqlstr,conn,1,1

rs.close

next

set rs=nothing

conn.close

set conn=nothing

end if

%>

'''''''''''''''''''''''''''''''' 加载完毕的时间

strEndTime = Timer

Response.Write ("运行处理时间: ")

Response.Write 1000*(strEndTime - strStartTime)

Response.Write (" 毫秒.")

response.end

%>

得到的数据如下:

odbc反复打开数据库50次:

6062.5 毫秒.

oledb反复打开数据库50次:

4601.563毫秒.

odbc移动记录集10000次:

1132.813 毫秒.

oledb移动记录集10000次:

304.6875 毫秒.

odbc反复打开记录集1000次:

8734.375 毫秒.

oledb反复打开记录集1000次:

7960.938 毫秒.

测试环境,ce1.70/512m/windows xp sp2/withnetbox(不再开发的测试服务器)

显然,在效率上,oledb有些微的优势。微软已经不更新ODBC,用JET方式连接数据库是一种更有效率的办法,特别是在需要移动游标的时候.另外,两者还有一些其他方面的区别,oledb是一种更底层的方法,在这种数据库连接方式中,应该注意的规范更多,就像用sql和access时候,某些查询语句也会不一样.例如:

select from user where id=1

将是一句错误的查询语句,因为user是系统保留的关键字.需要改为

select from [user] where id=1

如果使用odbc连接,则不存在上述情况.

如果使用jet连接,在某些虚拟主机中可能会因为access版本的不同而导致连接失败;所以你需要首先确定主机的引擎版本;在尽可能的情况下,使用以下语句打开access,将提高asp的效率,还有稳定性:

"provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath(db)

此外,打开数据库和记录集对象都是很消耗cpu资源的,尽可能减少查询是很必要的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学200731 计算机组成原理

《计算机组成原理》作业 一、填空 1.电子数字计算机从1946年诞生至今,按其工艺和器件特点,大致经历了四代变化。第一代从  年开始;第二代从  年开始;第三代从   年开始,采用  ;第四代从…

轻松与外来客户进行REST通信

在这个例子中,我们将向您展示如何使用Feign客户端开发一个简单的Spring Boot Application,以使用Weather REST服务。 Spring Boot是基于Java的框架,可简化Web和企业应用程序的构建。 Spring Boot具有嵌入式Tomcat,提供“启动器”…

【渝粤题库】陕西师范大学201701 高等数学(二)作业 (高起本、专升本)

《高等数学(二)》作业 一、填空题 1.点A(2,3,-4)在第 卦限。 2.设 . 3.函数 。 4.设 。 5.设共域D由直线所围成,则将二重积分化为累次积分得 。 6&#xff0e…

【渝粤题库】陕西师范大学202101 公共政策学

《公共政策学》作业 一、单项选择题 1、“公共政策是对全社会的价值做有权威的分配”,提出这一命题的学者是(  ) A拉斯韦尔    B伊斯顿       C戴伊       D安德森 2、美国学者林德布洛姆提出的公共政策模型是(  …

unzip不能解压mysql的zip_Linux中zip压缩和unzip解压缩命令详解

1、把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录2、把/home目录下面的mydata.zip解压到mydatabak目录里面unzip mydata.zip -d mydatabak3、把/home目录下面的abc文件夹和123.txt压缩成为abc123.zipzip -r abc123.zip abc 123.txt4、…

【渝粤题库】陕西师范大学202891 基于web的程序设计

填空题 1、执行完a"6"语句后&#xff0c;a是 类型。 2、程序段 <% a3 aa5 %> 执行完毕后a的值是 。 3、VBSCRIPT函数 可以将数值转换为字符串。 4、Mid&#xff08;“八千里路云和月”&#xff0c;3&#xff0c;2&#xff09;的返回值是什么&#xff1f; 5、Se…

通过Spring Boot了解H2 InMemory数据库

介绍 基本上&#xff0c;数据库设置涉及几个步骤&#xff0c;然后才能在应用程序中通过已配置的数据源使用它。 在实际项目实施中&#xff0c;这实际上是必需的。 但是&#xff0c;在某些情况下&#xff0c;我们只需要为某些事情完成POC&#xff0c;而整个数据库设置工作仍然是…

【渝粤题库】陕西师范大学210004幼儿园美术教育作业(高起专)

《幼儿园美术教育》作业 一、名词解释题 1、美术 2、曼陀罗 3、艺术 4、表现目标 5、意愿画 6、DBAE 7、夸张式表现 8、最近发展区 9、自由画 10、情节画 11、雕塑 12、艺术起源理论“巫术论” 13、儿童美术 14、物体画 15、工艺美术 16、过程目标 二、简答题 1、简述里德的艺术…

core identity mysql_Microsoft.AspNetCore.Identity 使用 mysql 报错处理

1.使用mysql 首先要确定mysql connector 支的版本&#xff0c;正面是链接https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.htmlTable 9.2 Supported versions of Entity Framework CoreConnector/NETEF Core 1.1EF Core 2.0EF Core 2.16.10.4.…

【渝粤题库】陕西师范大学291003综合英语(三)作业(高起专、高起本)

《综合英语三》作业 Matching. Read the following words and match them with the explanations in the right column. ( ) 1. inaudible A. to talk proudly ( ) 2. fragrance B. angry ( ) 3. boast C. the quality of being new ( ) 4. survive D. easily seen; standing o…

【渝粤题库】陕西师范大学300005 中国历史文选

《中国历史文选》作业 一、解释下列句子中黑体加线的字或词 1&#xff0e;三月丙午&#xff0c;入曹。数之&#xff0c;以其不用僖负羁而乘轩者三百人也&#xff0c;且曰&#xff1a;“献状。” 2&#xff0e;微楚之惠不及此&#xff0c;退三舍辟之&#xff0c;所以报也。 3&am…

mysql 数据路由_node-路由操作mysql数据库

node大部分方法都是异步的&#xff0c;在操作数据库方法后面紧接着输出结果&#xff0c;输出的结果只会为空值&#xff0c;使用promise及其方便的解决这个问题&#xff0c;接下来看看node如何使用路由来处理不同请求&#xff0c;进而操作mysql数据库一、引入相关依赖node中默认…

行为设计模式:中介者

以前我们看过迭代器模式。 中介者模式在实现目标上有很大的不同。 它是行为模式之一&#xff0c;其目的是改变对象之间的通信方式。 中介器将代替对象之间的直接通信&#xff0c;而不是直接相互通信。 例如&#xff0c;想象一下金融交易的场景。 您确实想交易和购买&#xff…

【渝粤题库】陕西师范大学500006 算法语言 作业

《算法语言》作业 一、填空题 1、13/2的运算结果为 &#xff0c;’A’2的运算结果是 。 2、C 语言源程序需经过 、 两个过程生成可执行文件。 3、如果表示16进制常量45&#xff0c;在C 中应写为 。 4、C中变量从其作用域上分为 、 5、表达式X12的值为 。 6、3(12>0)的值为 。…

mysql多数据源事务_多数据源一致性事务解决方案

spring 多数据源配置spring 多数据源配置一般有两种方案&#xff1a;1、在spring项目启动的时候直接配置两个不同的数据源&#xff0c;不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的session来操作。2、配置多个不同的数据源&#xff0c;使用一个session…

【渝粤题库】陕西师范大学700009 现代生物科技

《现代生物技术》作业 一.名词解释 1.生物技术 2.愈伤组织 3.前体 4.cDNA文库 5.化学酶工程 6.酶分子修饰 7.连续培养 8.DNA芯片 9.细胞融合 10.基因工程载体 11.蛋白质工程 12微生物转化 13.人工种子 14.胚胎移植 15.初级代谢产物 16.动物克隆技术 17、限制性内切酶 18、细胞全…

www.how2j.com_HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练)

www.how2j.comHOW-TO&#xff1a;快速开始使用Spring 4.0&#xff0c;以构建简单的REST-Like API&#xff08;演练&#xff09; 关于使用Spring MVC创建Web API的另一篇教程。 不太复杂。 只是一个演练。 生成的应用程序将提供简单的API&#xff0c;将Mongo作为其持久性&#x…

【渝粤题库】国家开放大学2021春3938管理英语2题目

试卷代号&#xff1a;3938 2 0 2 1年春季学期期末统一考试 管理英语2 试题 2021年7月 注 意 事 项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人…

flutter 返回指定界面_Flutter页面路由导航及传参

转载请注明出处: https://learnandfish.com/概述 每个应用都有很多个页面&#xff0c;在flutter中同样也有很多页面&#xff0c;被称之为路由(Router)&#xff0c;页面之间的跳转通过导航器(Navigator)进行管理。其中 Navigator.push 和 Navigator.pop 是最简单的跳转到新页面和…

正确的工作流程:我应该使用哪个OAuth 2.0流程?

什么是OAuth 2.0 OAuth 2.0是一个已被广泛采用的委托授权框架&#xff0c;已经存在了很多年&#xff0c;并且似乎已经存在。 如果您不熟悉OAuth 2.0的基本概念&#xff0c;可以使用 川崎孝彦写的优秀文章 。 这只是OAuth 2.0各方的简要提醒&#xff1a; 资源所有者–受保护资…