作者:邹飞邹飞邹飞 | 来源:互联网 | 2014-05-28 15:41
本文从以下几个方面来对Oracle、MySQL和PostgreSQL进行比较,接下来我们就一一开始介绍。混杂SQL(优化引擎)SQL是你与你的数据库交互的基础和最关键的措施,无论你抉择哪个。这三个平台也恰恰是从它开始恳挚离别。Oracle扶持极其混杂的查询、几乎不局
本文从以下几个方面来对Oracle、MySQL和PostgreSQL进行比较,接下来我们就一一开始介绍。
混杂SQL(优化引擎)
SQL是你与你的数据库交互的基础和最关键的措施,无论你抉择哪个。这三个平台也恰恰是从它开始恳挚离别。Oracle扶持极其混杂的查询、几乎不局限表的个数、所有的种类的连接和并合。固然Oracle有许多功能,然而它恳挚贵重的却是它基于成本的优化器,它能够分析SQL、万一可能的话举行重写和简化、基于成本抉择索引、定夺对表的垄断和它之中的所有其它的各种功能。
阅读MySQL的文档,你会觉察对偏向于功能的描写和供给约定义的细节使优化器和功能调剂在任何平台上都很混杂。MySQL法定的最大规模是在任何连接或在一个视图中表的最大数目为61个。再顺次的,我个人感受无论如何在任何一个利用中这么多表的一个查询将是难以利用的,因而正如上面提到的,现在更实用的是优化器而不是查询最大表格式,等等。
8.x版本的Postgresql扶持所有SQL92规范,几乎未曾任何局限。再顺次的,我感受你会看到的一个数据库优于其它的数据库的方面即便在优化方面。混杂的查询会变得混乱,并且查询计划是你在诊断功能瓶颈时的良好的朋友。
索引种类
索引技巧对于数据库功能是至关重要的,而Oracle有许多的选项可供抉择。有极其多的不同的索引种类,包括规范的二进制树、转换键的、基于功能的、常被讹谬利用的位图索引,甚至还有索引表。随着附带项技巧的进展,数据库管教员有了可用的供给索引的Oracle文本,它批准你搜查CLOB(字符大对象),并且Oracle
Spatial供给用于基于位置的数据的索引。
在MySQL中,我们觉察有二进制树、哈希、纯文本和GIS索引(对于基于位置的数据)。还有集群索引,然而万一说我在Oracle方面的经验给我任何点拨的话,那么即便大多数利用等闲是不相干的。因而,大多数情形下我在Oracle、MySQL或Postgres利用中看到的只有二进制树索引。另外,尽管像在MySQL中基于功能的索引是不可用的,然而他们能够穿越创立另一个保留利用这个函数的数据的列来举行模仿,然后增加一个引发器来将安装它。
Postgresql供给二进制树和哈希,还有R树,和它自己定制的GiST索引种类,GiST索引种类批准利用用户定义的种类和批准创立基于功能的索引zhengduan.com。Oracle供给了一个相仿的功能性种类,它的基于功能的索引能够用于基于pl/sql的功能而不但是规范的预定义系统功能,例如你本来可能会利用的trunc、UPPER。要当心像这么的索引可能拜会起来极其缓慢,你可能在谈论到要录入或移除数据时,甚至不渴望听到“慢”这个词。
它确乎告终了,并且优化器抉择索引的措施优于Oraclesh-ra.org。
审计
Oracle使你能够对一个表或一个文件举行审计,穿越审查索引工具。一旦批准了,你能够审查对某一个表的插入、更新或剔除,可能登录,或甚至是某一特定用户的所有拜会。它有众多选项,并且设置为可用的是极其容易的。
Postgresql也有这秉功能,并且它看起来和Oracle的一样灵便和可搭配的。
另一方面MySQL看起来未曾供给这秉功能,然而你当然能够创立你自己的存储过程和引发器来做你想做的,并录入相干的消息到数据表里,这只必需一点额外的工作。
数据种类
Oracle、MySQL和Postgresql都扶持最大到达4GB的大型的二进制和文本数据。我们所懂得并迷恋的所有的数据种类也是极其有用的,例如数字、字符和日期。每一个都在定然程度上供给一些定制数据种类,尽管我很少看到在利用中利用这些。
目前我要讲的一件事是Postgresql和MySQL曾经超过了过去的基础,无须担心它们告终我们经常利用的一个良好的自增长列种类。Oracle的答辩是按次序来做这项工作更加管用,然而是静态的。Oracle也未曾SET数据种类,这个数据种类很重要。它也未曾只有工夫的工夫数据种类,这个数据种类Postgresql和MySQL都有。然而你会觉察你能在这三个数据库品平台上做所有你想做的关于日期和工夫的垄断,从对时区的垄断到对间隔的处理,等等。
另外一个我迷恋Postgresql和MySQL的原因是它们扶持各种良好的数学数字种类,从smallint到decimal、real、double,等等。这些利用了大约的架构告终,与编程语言中可用的数据种类相相称,例如C语言。
对事务的扶持
在数据库领土,贴切的事务垄断顺从了acronym到ACID,这意味着原子性、统一性、隔绝性和永远性。原子性含义是一个事务是一个全面的单元,所有都被提交或所有都被回滚。统一性含义是你从一个*VALID*事态迁移到另一个,例如你厉行贴切的局限来加深业务逻辑。隔绝性含义是一个事务不能看到另一个事务在做什么,直到它告终了(提交了)。永远性含义是一旦提交了,这个改变即便永远的,并且是遏止你硬盘失利的*至关重要的*。
关于这个问题我有一些事情要说,渴望能够避免答辩。例如,Oracle在它的数据字典中的它本身的功能视图就不是事务型的。其次,它们在那个环境中大约未曾必需。有众多利用是这么的。我看过一个航空票务系统,它必需定期升级和增加第二个服务器用于放置Oracle。他们看了这个软件的所有相干的批准成本和大型装备的硬件成本。然后他们回头看这个利用。有些人准确的认识到在航空网站上90%的垄断是博览航班(只读),而仅仅10%才是恳挚的购买机票。因而,他们发生了一组低成本的MySQL服务器用于博览航班,而改变旅程哀求则提交给大型的Oracle服务器来厉行票务垄断。多么好的一个结
合处理计划!
是的,MySQL在事务方面的InnoDB表方面曾经走了很长一段路。这也批准以解释为什么Oracle购买Innobase。一些人依旧感受MySQL只是一个用于LDAP或NFS的SQL接口。然而,MySQL确乎走了很长的路并且将继续前行着。
在这点上Postgresql更全面,因而我会说你能看到的重要是和Oracle的功能方面的不同,这即便它的问题。
归纳
正如你在我们的数据库平台的多个局部中看到的,抉择一个数据库平台时要琢磨许多事情。从功能全面性,到供给商扶持和共同扶持,到功能和优化。在你富余打听你在发生的利用和它恳挚必需什么之前,不要投资过多。到了最后你可能感受这些比拟笼统,并且难以确定,然而有了一点发明性,精细思忖这个主题,并且具有一个好的开发环境,你就该当能够得出一个成本高效并壮大的处理计划来。
关于Oracle、MySQL和PostgreSQL的比较介绍这么多吧,如果您有不同的见解,也欢迎您与我们分享。