|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
MyISAMMysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务<pstyle="TEXT-INDENT:2em">这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2举行对照,由于MySQL4.0.2-alpha入手下手撑持事件的观点,因而如许的对照关于MySQL应当较为有益。<pstyle="TEXT-INDENT:2em"> 我们如许的对照不想仅仅成为一份功能测试呈报,由于最少从我团体来看,关于一个数据库,不乱性和速率其实不能代表统统。关于一个成熟的数据库,不乱性一定会日趋供应。而跟着硬件功能的飞速进步,速率也不再是甚么太年夜的成绩。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em"> 1、二者的配合上风<pstyle="TEXT-INDENT:2em"> 这两个产物都属于开放源码的一员,功能和功效都在高速地进步和加强。MySQLAB的人们和PostgreSQL的开辟者们都在尽量地把各自的数据库改得愈来愈好,以是关于任何贸易数据库利用个中的任何一个都不克不及算是毛病的选择。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em"> 2、二者分歧的背景<pstyle="TEXT-INDENT:2em"> MySQL的面前是一个成熟的贸易公司,而PostgreSQL的面前是一个复杂的意愿开辟组。这使得MySQL的开辟历程更加稳重,而PostgreSQL的反响更加敏捷。<pstyle="TEXT-INDENT:2em"> 如许的两种背景间接招致了各自固有的长处和弱点。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em"> 3、MySQL的次要长处<pstyle="TEXT-INDENT:2em"> 1、起首是速率,MySQL一般要比PostgreSQL快很多。MySQL自已也传播鼓吹速率是他们寻求的次要方针之一,基于这个缘故原由,MySQL在之前的文档中也已经说过其实不筹办撑持事件和触发器。可是在最新的文档中,我们看到MySQL4.0.2-alpha已入手下手撑持事件,并且在MySQL的TODO中,对触发器、束缚如许的必定会下降速率的功效也列进了日程。可是,我们仍旧有来由信任,MySQL将有大概一向坚持速率的上风。<pstyle="TEXT-INDENT:2em"> 2、MySQL比PostgreSQL更盛行,盛行关于一个贸易软件来讲,也是一个很主要的目标,盛行意味着更多的用户,意味着承受了更多的磨练,意味着更好的贸易撑持、意味着更多、更完美的文档材料。<pstyle="TEXT-INDENT:2em"> 3、与PostgreSQL比拟,MySQL更合适在Windows情况下运转。MySQL作为一个当地的Windows使用程序运转(在NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运转在Cygwin摹拟情况下。PostgreSQL在Windows下运转没有MySQL不乱,应当是能够设想的。<pstyle="TEXT-INDENT:2em"> 4、MySQL利用了线程,而PostgreSQL利用的是历程。在分歧线程之间的情况转换和会见公用的存储地区明显要比在分歧的历程之间要快很多。<pstyle="TEXT-INDENT:2em"> 5、MySQL能够顺应24/7运转。在尽年夜多半情形下,你不必要为MySQL运转任何扫除程序。PostgreSQL今朝仍不完整顺应24/7运转,这是由于你必需每隔一段工夫运转一次VACUUM。<pstyle="TEXT-INDENT:2em"> 6、MySQL在权限体系上比PostgreSQL某些方面更加完美。PostgreSQL只撑持关于每个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的受权,而MySQL同意你界说一整套的分歧的数据级、表级和列级的权限。关于列级的权限,PostgreSQL能够经由过程创建视图,并断定视图的权限来填补。MySQL还同意你指定基于主机的权限,这关于今朝的PostgreSQL是没法完成的,可是在良多时分,这是有效的。<pstyle="TEXT-INDENT:2em"> 7、因为MySQL4.0.2-alpha入手下手撑持事件的观点,因而事件关于MySQL不再仅仅成为优势。相反,由于MySQL保存无事件的表范例。这就为用户供应了更多的选择。<pstyle="TEXT-INDENT:2em"> 8、MySQL的MERGE表供应了一个共同办理多个表的办法。<pstyle="TEXT-INDENT:2em"> 9、MySQL的myisampack能够对只读表举行紧缩,今后仍旧能够间接会见该表中的行。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em"> 4、PostgreSQL的次要长处:<pstyle="TEXT-INDENT:2em"> 1、对事件的撑持与MySQL比拟,履历了更加完全的测试。关于一个严厉的贸易使用来讲,事件的撑持是不成或缺的。<pstyle="TEXT-INDENT:2em"> 2、MySQL关于无事件的MyISAM表。接纳表锁定,一个长工夫运转的查询极可能会长工夫地拦阻对表的更新。而PostgreSQL不存在如许的成绩。<pstyle="TEXT-INDENT:2em"> 3、PostgreSQL撑持存储历程,而今朝MySQL不撑持,关于一个严厉的贸易使用来讲,作为数据库自己,有浩瀚的贸易逻辑的存在,此时利用存储历程能够在较少地增添数据库服务器的包袱的条件下,对如许的贸易逻辑举行封装,并能够使用数据库服务器自己的内涵机制对存储历程的实行举行优化。别的存储历程的存在也制止了在收集上大批的原始的SQL语句的传输,如许的上风是不言而喻的。<pstyle="TEXT-INDENT:2em"> 4、对视图的撑持,视图的存在一样能够最年夜限制天时用数据库服务器内涵的优化机制。并且关于视图权限的公道利用,现实上能够供应行级其余权限,这是MySQL的权限体系所没法完成的。<pstyle="TEXT-INDENT:2em"> 5、对触发器的撑持,触发器的存在不成制止的会影响数据库运转的效力,可是与此同时,触发器的存在也有益于对贸易逻辑的封装,能够削减使用程序中对统一贸易逻辑的反复把持。公道地利用触发器也有益于包管数据的完全性。<pstyle="TEXT-INDENT:2em"> 6、对束缚的撑持。束缚的感化更多地体现在对数据完全性的包管上,公道地利用束缚,也能够削减编程的事情量。<pstyle="TEXT-INDENT:2em"> 7、对子查询的撑持。固然在良多情形下在SQL语句中利用子查询效力低下,并且尽年夜多半情形下可使用带前提的多表毗连来替换子查询,可是子查询的存在在良多时分仍旧不成制止。并且利用子查询的SQL语句与利用带前提的多表毗连比拟具有更高的程序可读性。<pstyle="TEXT-INDENT:2em"> 8、撑持R-trees如许可扩大的索引范例,能够更便利地处置一些特别数据。<pstyle="TEXT-INDENT:2em"> 9、PostgreSQL能够更便利地利用UDF(用户界说函数)举行扩大。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em"> 5、那末我事实应当利用MySQL仍是PostgreSQL<pstyle="TEXT-INDENT:2em"> 这个成绩很难说得清,并且现实上除MySQL和PostgreSQL外,利用Oracle、Sybase、Informix等也是明智的选择。怎样你断定只在MySQL和PostgreSQL中举行选择,以下划定规矩老是无效的。<pstyle="TEXT-INDENT:2em"> 1、假如你的操纵体系是Windows,你应当利用MySQL。<pstyle="TEXT-INDENT:2em"> 2、假如你对数据库其实不了非常懂得,乃至不晓得事件、存储历程等事实是甚么,你应当利用MySQL。<pstyle="TEXT-INDENT:2em"> 3、假如你的使用对数据的完全性和严厉性请求不高,可是寻求处置的高速率。比方是一个论坛和社区,你应当利用MySQL。<pstyle="TEXT-INDENT:2em"> 4、你的使用是一个严厉的贸易使用,对数据完全性请求很高。并且你但愿对一些贸易数据逻辑举行很好的封装,比方是一个网上银行,你应当利用PostgreSQL。<pstyle="TEXT-INDENT:2em"> 5、你的使用处置的是地舆数据,因为R-TREES的存在,你应当利用PostgreSQL。<pstyle="TEXT-INDENT:2em"> 6、你是一个数据库内核的狂酷爱好者,你乃至但愿具有你本人版本的数据库,毫无疑问,你必需利用PostgreSQL,没准下一个PostgreSQL版本中某一个模块的作者就是你。<pstyle="TEXT-INDENT:2em"> <pstyle="TEXT-INDENT:2em">跋文 以上只是作者从本人的了解只管客不雅公平地评价MySQL和PostgreSQL的好坏。个中的带有偏向性的定见只代表作者团体概念,有关这两个数据库,接待宽大伴侣提出本人的意见。
限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。 |
|