SQL Server 和 Oracle 以及 MySQL 有哪些区别?

news/2024/11/7 4:50:11/文章来源:https://www.cnblogs.com/ZJ-CN/p/18531420

SQL Server 可能是指下面的任意一项:

Microsoft SQL Server, a relational database server from Microsoft
Sybase SQL Server, a relational database server developed by Sybase
SQL Server (magazine), a trade publication and web site owned by Penton Media

 

SQL,在这里我理解成 MS SQL Server。三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性。

排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相似,就不赘述了。

  • 如果要说明三者的区别,首先就要从历史入手。
  1. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision。 Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去。开始创业时只有1200美元,却使得Oracle公司连续12年销售额每年翻一番。
    Oracle成立于1977年,早期的理论基础,反而来自于一篇IBM的论文《A Relational Model of Data for Large Shared Data Banks》【1】。作者CODD选取了关系代数的五种运算,并基于运算,架构了一种新型的数据存储模型。基于这种模型,Oracle成为了一个非常典型的关系数据库。因此也变的严谨、安全、高速、稳定,并且变的越来越庞大。
    由于其诞生早、结构严谨、高可用、高性能等特点,使其在传统数据库应用中大杀四方,金融、通信、能源、运输、零售、制造等各个行业的大型公司基本都是用了Oracle,早些年的时候,世界500强几乎100%都是Oracle的用户。
  2. MySQL :MySQL的最初的核心思想,主要是开源、简便易用。其开发可追溯至1985年,而第一个内部发行版本诞生,已经是1995年。到1998年,MySQL已经可以支持10中操作系统了,其中就包括win平台。但依然问题多多,如不支持事务操作、子查询 、外键、存储过程和视图等功能。
    下图是一个截止至2006年的数据库市场占有率【2】:
     
    图中可以看出,MySQL的爆发实际是在01、02年,尤其是02年发布的4.0 Beta版,正式选定InnoDB作为默认引擎,对事务处理能力及数据缓存能力有了极大的提高。同年4.1版开始支持子查询,至此MySQL终于蜕变成一个成熟的关系型数据库系统。05年的5.0版本又添加了存储过程、服务端游标、触发器、查询优化以及分布式事务功能,但同年被Oracle抄了后路,InnoDB被Oracle收编。08年,MySQL被Sun收购,09年,Oracle收购了Sun和MySQL。
    由于MySQL的早期定位,其主要应用场景就是互联网开发。基本上,互联网的爆发成就了MySQL,LAMP架构风靡天下。而由于MySQL更多的的追求轻量、易用,以及早期的事物操作及复杂查询优化的缺失,在传统的数据库应用场景中,份额极少。
      
  3. SQL Server:一提到SQL Server,大家一般都只想到Microsoft SQL Server,而非Sybase SQL Server。SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司拦下的生意,是为IBM(又出现了)公司的OS/2操作系统开发的。随着OS/2项目的失败,大家也分道扬镳。 Microsoft自然转向自己的win操作系统,作为windows NT软件方案的一部分。而Sybase则专注于Linux/Unix方向的数据库开发。
    MS SQL Server主要面向中小企业。其最大的优势就是在于集成了MS公司的各类产品及资源,提供了强大的可视化界面、高度集成的管理开发工具,在快速构建商业智能(BI)方面颇有建树。 MS SQL Server是MS公司在软件集成方案中的重要一环,也为WIN系统在企业级应用中的普及做出了很大贡献。
     
  • Oracle。Oracle的应用,主要在传统行业的数据化业务中,比如:银行、金融这样的对可用性、健壮性、安全性、实时性要求极高的业务;零售、物流这样对海量数据存储分析要求很高的业务。此外,高新制造业如芯片厂也基本都离不开Oracle;电商也有很多使用者,如京东(正在投奔Oracle)、阿里巴巴(计划去Oracle化)。而且由于Oracle对复杂计算、统计分析的强大支持,在互联网数据分析、数据挖掘方面的应用也越来越多。一个典型场景是这样的:
    某电信公司(非国内)下属某分公司的数据中心,有4台Oracle Sun的大型服务器用来安装Solaris操作系统和Oracle并提供计算服务,3台Sun Storage磁盘阵列来提供Oracle数据存储,12台IBM小型机,一台Oracle Exadata服务器,一台500T的磁带机用来存储历史数据,San连接内网,使用Tuxedo中间件来保证扩展性和无损迁移。建立支持高并发的Oracle数据库,通过OLTP系统用来对海量数据实时处理、操作,建立高运算量的Oracle数据仓库,用OLAP系统用来分析营收数据及提供自动报表。总预算约750万美金。
  • MySQL。MySQL基本是生于互联网,长于互联网。其应用实例也大都集中于互联网方向,MySQL的高并发存取能力并不比大型数据库差,同时价格便宜,安装使用简便快捷,深受广大互联网公司的喜爱。并且由于MySQL的开源特性,针对一些对数据库有特别要求的应用,可以通过修改代码来实现定向优化,例如SNS、LBS等互联网业务。一个典型的应用场景是:
    某互联网公司,成立之初,仅有PC数台,通过LAMP架构迅速搭起网站框架。随着业务扩张、市场扩大,迅速发展成为6台Dell小型机的中型网站。现在花了三年,终于成为垂直领域的最大网站,计划中的数据中心,拥有Dell机架式服务器40台,总预算20万美金。
  • MS SQL Server。windows生态系统的产品,好处坏处都很分明。好处就是,高度集成化,微软也提供了整套的软件方案,基本上一套win系统装下来就齐活了。因此,不那么缺钱,但很缺IT人才的中小企业,会偏爱 MS SQL Server 。例如,自建ERP系统、商业智能、垂直领域零售商、餐饮、事业单位等等。
    1996年,Bill Gates亲自出手,从Borland挖来了大牛Anders,搞定了C#语言。微软02年搞定了。成熟的.NET、Silverlight技术,为 MS SQL Server赢得了部分互联网市场,其中就有曾经的全球最大社交网站MySpace,其发展历程很有代表性,可作为一个比较特别的例子【3】。其巅峰时有超过1.5亿的注册用户及每月400亿的访问量。应该算是MS SQL Server支撑的最大的数据应用了。
    • 架构。其实要说执行的区别,主要还是架构的区别。正是架构导致了相同SQL在执行过程中的解释、优化、效率的差异。这里只做粗略说明,就不细说了:
    1. Oracle: 数据文件包括:控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件。这是根据文件功能行进行划分,并且所有文件都是二进制编码后的文件,对数据库算法效率有极大的提高。由于Oracle文件管理的统一性,就可以对SQL执行过程中的解析和优化,指定统一的标准:
      RBO(基于规则的优化器)、CBO(基于成本的优化器)
      通过优化器的选择,以及无敌的HINT规则,给与了SQL优化极大的自由,对CPU、内存、IO资源进行方方面面的优化。
    2. MySQL:最大的一个特色,就是自由选择存储引擎。每个表都是一个文件,都可以选择合适的存储引擎。常见的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于这种开放插件式的存储引擎,比如要求数据库与引擎之间的松耦合关系。从而导致文件的一致性大大降低。在SQL执行优化方面,也就有着一些不可避免的瓶颈。在多表关联、子查询优化、统计函数等方面是软肋,而且只支持极简单的HINT。
    3. SQL Server :数据架构基本是纵向划分,分为:Protocol Layer(协议层), Relational Engine(关系引擎), Storage Engine(存储引擎), SQLOS。SQL执行过程就是逐层解析的过程,其中Relational Engine中的优化器,是基于成本的(CBO),其工作过程跟Oracle是非常相似的。在成本之上也是支持很丰富的HINT,包括:连接提示、查询提示、表提示。

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

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

相关文章

【网络知识系列】抓包带你深入了解网关到底起什么样的作用?不同网段通信的过程详解

以下文章来源于网络之路博客 ,作者网络之路作者一天 不同网段通信的过程 不同网段就分两种了,同一个局域网下面,不同网段之间的通信,或者是从局域网去往互联网的通信,那么这个过程又是怎么样的呢?还记得第二篇这个内容吗,访问者把数据交给网关,当时候是没有讲解这个里面…

数据结构__链表_单链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

一、链表的原理与应用 对于顺序表的数据增加和删除是比较麻烦,因为都需要移动一片连续的内存。 顺序表的优点是:由于顺序表数据元素的内存地址都是连续的,所以可以实现随机访问,而且不需要多余的信息来描述相关的数据,所以存储密度高。 顺序表的缺点是:顺序表的数据在进行…

【java开发】gitee变成maven私库

原创 晓华WarmFlow warm-flow工作流1、背景 当由于各种原因,比如网络、想控制谁有权限访问类库或者公司没有服务器作为私库等,可以采用此法。 2、Gitee建新的仓库 我的仓库地址:https://gitee.com/min290/warm-flow-repo.git 2.1 首先要建立仓库2.2 仓库选择开源,否则无法下…

【Proxychains】详解

原创 无问之路 巢安实验室免责声明 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。简介 ProxyChains是Linux和其他Unix下的代理工具。它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道。Pro…

[hgame 2023]vm

--这是我的第一个博客--如有错误希望大佬能指出---进来之后看到第8行和第12行有不知道的函数,分别是sub_140001000,sub_1400010B0。 进入第8行的sub_140001000看看。再进入sub_140001060。会发现初始化了一些以a1为基地址的数据。 vm逆向,即虚拟机逆向。这里的虚拟机类似jav…

【windows应用】命令行禁用、启用Windows系统代理

原创 hyang0 生有可恋Windows 系统代理可以通过窗口鼠标点击开关进行配置,当需要频繁切换代理和非代理状态时命令行操作会更方便。系统代理是通过注册表进行控制的,可以通过操作注册表项来控制系统代理的禁用或启用: # 禁用: reg add "HKEY_CURRENT_USER\SOFTWARE\Mic…

【红队】dump RDP凭据

免责声明: 由于传播、利用本公众号文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责管理员通常使用远程桌面协议 (RDP) 来远程管理 Windows 环境。在充当跳板机以使用户能够访问其他网络的系统中启用它也是典型的 RDP。然而,虽然这个协议在大多数…

【免杀】DLL 侧载

一、什么是 DLL?二、什么是 DLL 劫持?三、DLL 路径搜索顺序四、DLL 劫持原理五、DLL Sideloading六、什么是 DLL 代理?七、执行 DLL 代理八、武器化 DLL 代理案例1:Teams案例2:Obsidian九、结论原创 独眼情报哎,犯病了,又整这种没人看的技术长文!但是看到很好的技术文章…

【web应用】中间件汇总

原创 boo 学而嘉一、HTTP服务 1.Apache HTTP Server主要用于静态内容服务 最新版本 2.4.592.Nginx主要用于静态内容服务和代理服务器 最新版本1.26.2主要功能: 1.HTTP 服务器(动静分离)nginx + tomcat中,可以将动态资源交给tomcat,而静态资源则交给Nginx,这样可以减轻tom…

c++中的try-catch及throw

C++ 使用 try-catch 语句来捕获和处理异常。try 块包含可能发生错误的代码,而 catch 块则用来捕获并处理错误。 try-catch 语句的基本结构 try {// 可能抛出异常的代码 } catch (exception_type1 e1) {// 处理异常类型 1 } catch (exception_type2 e2) {// 处理异常类型 2 } c…

【windows应用】windows系统怎么查看密钥

原创 L.w IT小农工大家都知道,安装Win10/11系统之后需要密钥才能使用所有的功能,网上提供的激活方法有很多,那我们要怎么知道自己的密钥呢? Windows 产品密钥是由 25 个字符组成的代码,用于激活 Windows。其格式如下所示: 产品密钥:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX 操作过…

【 js编程】原型和原型链

原创 mike Web全栈开发者驿站原型和原型链在 js中起着至关重要的作用。它们使得 js 能够以一种独特的方式实现面向对象编程,虽然与传统的面向对象编程语言有所不同,但却提供了很大的灵活性和强大的功能。然而,原型链也有一些缺点,如属性查找的性能问题、继承的脆弱性以及隐…