個人認為PostgreSQL蠻好用的,PostgreSQL由哥里福尼亞大學一個實驗室開發(fā)組開發(fā)的,該數據庫具有許多大型數據庫的特征,并具有一些特別的數據類型,象經緯度、網絡IP地址等類型,因此可以開發(fā)象GPS應用等等這類課題。

創(chuàng)新互聯專業(yè)為企業(yè)提供堯都網站建設、堯都做網站、堯都網站設計、堯都網站制作等企業(yè)網站建設、網頁設計與制作、堯都企業(yè)網站模板建站服務,十余年堯都做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
另外,PostgreSQL免費,我一直在使用它,對它比較鐘愛,備份恢復命令非常簡單。
如果打算為項目選擇一款免費、開源的數據庫,那么你可能會在MySQL與PostgreSQL之間猶豫不定。MySQL與PostgreSQL都是
免費、開源、強大、且功能豐富的數據庫。你主要的問題可能是:哪一個才是最好的開源數據庫,MySQL還是PostgreSQL呢?該選擇哪一個開源數據
庫呢?
在選擇數據庫時,你所做的是個長期的決策,因為后面如果再改變決定將是非常困難且代價高昂的。你希望一開始就選擇正確。兩個流行的開源數據庫MySQL與PostgreSQL常常成為最后要選擇的產品。對這兩個開源數據庫的高層次概覽將會有助于你選擇最適合自己需要的。
MySQL
MySQL
相對來說比較年輕,首度出現在1994年。它聲稱自己是最流行的開源數據庫。MySQL就是LAMP(用于Web開發(fā)的軟件包,包括
Linux、Apache及Perl/PHP/Python)中的M。構建在LAMP棧之上的大多數應用都會使用MySQL,包括那些知名的應用,如
WordPress、Drupal、Zend及phpBB等。
一開始,MySQL的設計目標是成為一個快速的Web服務器后端,使用快速的
索引序列訪問方法(ISAM),不支持ACID。經過早期快速的發(fā)展之
后,MySQL開始支持更多的存儲引擎,并通過InnoDB引擎實現了ACID。MySQL還支持其他存儲引擎,提供了臨時表的功能(使用MEMORY存
儲引擎),通過MyISAM引擎實現了高速讀的數據庫,此外還有其他的核心存儲引擎與第三方引擎。
MySQL的文檔非常豐富,有很多質量不錯的免費參考手冊、圖書與在線文檔,還有來自于Oracle和第三方廠商的培訓與支持。
MySQL
近幾年經歷了所有權的變更和一些頗具戲劇性的事件。它最初是由MySQL
AB開發(fā)的,然后在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版
本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一
些則是收費的。其核心代碼基于GPL許可,對于那些不想使用GPL許可的開發(fā)者與廠商來說還有商業(yè)許可可供使用。
現在,基于最初的
MySQL代碼還有更多的數據庫可供選擇,因為幾個核心的MySQL開發(fā)者已經發(fā)布了MySQL分支。最初的MySQL創(chuàng)建者之一 Michael
"Monty"
Widenius貌似后悔將MySQL賣給了Sun公司,于是又開發(fā)了他自己的MySQL分支MariaDB,它是免費的,基于GPL許可。知名的
MySQL開發(fā)者Brian Aker所創(chuàng)建的分支Drizzle對其進行了大量的改寫,特別針對多CPU、云、網絡應用與高并發(fā)進行了優(yōu)化。
PostgreSQL
PostgreSQL標榜自己是世界上最先進的開源數據庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那么昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加利福尼亞大學伯克利分校開發(fā)的,作為Ingres數據庫的后繼。
PostgreSQL
是完全由社區(qū)驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了
多個不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發(fā)代碼,只需要提供一個版權聲
明即可。
可靠性是PostgreSQL的最高優(yōu)先級。它以堅如磐石的品質和良好的工程化而聞名,支持高事務、任務關鍵型應用。
PostgreSQL的文檔非
常精良,提供了大量免費的在線手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社區(qū)支持是非常棒的,還有來自于獨立廠商的商業(yè)支持。
數
據一致性與完整性也是PostgreSQL的高優(yōu)先級特性。PostgreSQL是完全支持ACID特性的,它對于數據庫訪問提供了強大的安全性
保證,充分利用了企業(yè)安全工具,如Kerberos與OpenSSL等。你可以定義自己的檢查,根據自己的業(yè)務規(guī)則確保數據質量。在眾多的管理特性
中,point-in-time
recovery(PITR)是非常棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復創(chuàng)建熱備份以及快照與恢復的能力。但這并不是
PostgreSQL的全部,項目還提供了幾個方法來管理PostgreSQL以實現高可用、負載均衡與復制等,這樣你就可以使用適合自己特定需求的功能
了。
平臺
MySQL與PostgreSQL都出現在一些高流量的Web站點上:
MySQL:Slashdot、Twitter、Facebook與Wikipedia
PostgreSQL:Yahoo使用了一個修改的PostgreSQL數據庫來處理每天數以億計的事件,還有Reddit和Disqus
MySQL
與PostgreSQL都能運行在多個操作系統(tǒng)上,如Linux、Unix、Mac OS
X與Windows。他們都是開源、免費的,因此測試他們時的唯一代價就是你的時間與硬件。他們都很靈活且具有可伸縮性,可用在小型系統(tǒng)和大型分布式系統(tǒng)
上。MySQL在一個領域上要比PostgreSQL更進一步,那就是它的觸角延伸到了嵌入式領域,這是通過libmysqld實現的。
PostgreSQL不支持嵌入式應用,依然堅守在傳統(tǒng)的客戶端/服務器架構上。
MySQL通常被認為是針對網站與應用的快速數據庫后端,
能夠進行快速的讀取和大量的查詢操作,不過在復雜特性與數據完整性檢查方面不太盡如人意。
PostgreSQL是針對事務型企業(yè)應用的嚴肅、功能完善的數據庫,支持強ACID特性和很多數據完整性檢查。他們二者都在某些任務上具有很快的速
度,MySQL不同存儲引擎的行為有較大差別。MyISAM引擎是最快的,因為它只執(zhí)行很少的數據完整性檢查,適合于后端讀操作較多的站點,不過對于包含
敏感數據的讀/寫數據庫來說就是個災難了,因為MyISAM表最終可能會損壞。MySQL提供了修復MySQL表的工具,不過對于敏感數據來說,支持
ACID特性的InnoDB則是個更好的選擇。
與之相反,PostgreSQL則是個只有單一存儲引擎的完全集成的數據庫。你可以通過調整postgresql.conf文件的參數來改進性能,也可以調整查詢與事務。PostgreSQL文檔對于性能調優(yōu)提供了非常詳盡的介紹。
MySQL與PostgreSQL都是高可配置的,并且可以針對不同的任務進行相應的優(yōu)化。他們都支持通過擴展來添加額外的功能。
一個常見的誤解就是MySQL要比PostgreSQL更容易學習。關系數據庫系統(tǒng)都是非常復雜的,這兩個數據庫的學習曲線其實是差不多的。
標準兼容性
PostgreSQL
旨在實現SQL兼容性(當前標準是ANSI-SQL:2008)。MySQL則兼容大部分SQL,不過還有自己的擴展,可以支
持NoSQL特性,這在參考手冊中都有介紹。每種方式都有優(yōu)缺點。兼容標準會讓數據庫管理員、數據庫開發(fā)者與應用開發(fā)者更舒服一些,因為這意味著他們只需
學習一套標準、一套特性和命令即可。這會節(jié)省時間,提升效率,也不會被鎖定在特定的廠商上。
支持使用非標準的自定義功能的人們認為這樣可
以快速采用新的特性,而不必等待標準進程完成。ANSI/ISO標準在不斷演化,因此標準兼容性也是個
變化的目標:知名的關系型數據庫Microsoft SQL Server、Oracle與IBM DB2也只是部分兼容于標準。
結論
雖
然有不同的歷史、引擎與工具,不過并沒有明確的參考能夠表明這兩個數據庫哪一個能夠適用于所有情況。很多組織喜歡使用PostgreSQL,因為
它的可靠性好,在保護數據方面很擅長,而且是個社區(qū)項目,不會陷入廠商的牢籠之中。MySQL更加靈活,提供了更多選項來針對不同的任務進行裁剪。很多時
候,對于一個組織來說,對某個軟件使用的熟練程度要比特性上的原因更重要。
用pgsql的都是有情懷的公司、人。
平常沒事沒人用。但是postgresql優(yōu)越的性能是不能忽視的。
區(qū)別:
mySql是真正的數據庫,可以動態(tài)的自動進行數據處理。
Access提供是的是文件服務,自己不可以動態(tài)處理數據。
具體到好用看您的需求,數據量大推薦mySql,個人站點數據量小使用Access便可以。
一、 PostgreSQL 的穩(wěn)定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步,然而很多 MySQL 用戶都遇到過Server級的數據庫丟失的場景——mysql系統(tǒng)庫是MyISAM的,相比之下,PG數據庫這方面要好一些。
二、任何系統(tǒng)都有它的性能極限,在高并發(fā)讀寫,負載逼近極限下,PG的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之后不再下降,而 MySQL 明顯出現一個波峰后下滑(5.5版本之后,在企業(yè)級版本中有個插件可以改善很多,不過需要付費)。
三、PG 多年來在 GIS 領域處于優(yōu)勢地位,因為它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型,相比之下mysql就差很多,instagram就是因為PG的空間數據庫擴展POSTGIS遠遠強于MYSQL的my spatial而采用PGSQL的。
四、PG 的“無鎖定”特性非常突出,甚至包括 vacuum 這樣的整理數據空間的操作,這個和PGSQL的MVCC實現有關系。
五、PG 的可以使用函數和條件索引,這使得PG數據庫的調優(yōu)非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
六、PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統(tǒng)計函數和統(tǒng)計語法支持,比如分析函數(ORACLE的叫法,PG里叫window函數),還可以用多種語言來寫存儲過程,對于R的支持也很好。這一點上MYSQL就差的很遠,很多分析功能都不支持,騰訊內部數據存儲主要是MYSQL,但是數據分析主要是HADOOP+PGSQL。
七、PG 的有多種集群架構可以選擇,plproxy 可以支持語句級的鏡像或分片,slony 可以進行字段級的同步設置,standby 可以構建WAL文件級或流式的讀寫分離集群,同步頻率和集群策略調整方便,操作非常簡單。
八、一般關系型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能作為外部大數據訪問。而 PG 的 TEXT 類型可以直接訪問,SQL語法內置正則表達式,可以索引,還可以全文檢索,或使用xml xpath。用PG的話,文檔數據庫都可以省了。
九,對于WEB應用來說,復制的特性很重要,mysql到現在也是異步復制,pgsql可以做到同步,異步,半同步復制。還有mysql的同步是基于binlog復制,類似oracle golden gate,是基于stream的復制,做到同步很困難,這種方式更加適合異地復制,pgsql的復制基于wal,可以做到同步復制。同時,pgsql還提供stream復制。
十,pgsql對于numa架構的支持比mysql強一些,比MYSQL對于讀的性能更好一些,pgsql提交可以完全異步,而mysql的內存表不夠實用(因為表鎖的原因)
最后說一下我感覺 PG 不如 MySQL 的地方。
第一,MySQL有一些實用的運維支持,如 slow-query.log ,這個pg肯定可以定制出來,但是如果可以配置使用就更好了。
第二是mysql的innodb引擎,可以充分優(yōu)化利用系統(tǒng)所有內存,超大內存下PG對內存使用的不那么充分,
第三點,MySQL的復制可以用多級從庫,但是在9.2之前,PGSQL不能用從庫帶從庫。
第四點,從測試結果上看,mysql 5.5的性能提升很大,單機性能強于pgsql,5.6應該會強更多.
第五點,對于web應用來說,mysql 5.6 的內置MC API功能很好用,PGSQL差一些。
另外一些:
pgsql和mysql都是背后有商業(yè)公司,而且都不是一個公司。大部分開發(fā)者,都是拿工資的。
說mysql的執(zhí)行速度比pgsql快很多是不對的,速度接近,而且很多時候取決于你的配置。
對于存儲過程,函數,視圖之類的功能,現在兩個數據庫都可以支持了。
另外多線程架構和多進程架構之間沒有絕對的好壞,oracle在unix上是多進程架構,在windows上是多線程架構。
很多pg應用也是24/7的應用,比如skype. 最近幾個版本VACUUM基本不影響PGSQL 運行,8.0之后的PGSQL不需要cygwin就可以在windows上運行。
至于說對于事務的支持,mysql和pgsql都沒有問題。
MySQL
MySQL聲稱自己是最流行的開源數據庫。LAMP中的M指的就是MySQL。構建在LAMP上的應用都會使用MySQL,如WordPress、Drupal等大多數php開源程序。MySQL最初是由MySQL AB開發(fā)的,然后在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一些則是收費的。其核心代碼基于GPL許可,由于MySQL被控制在Oracle,社區(qū)擔心會對MySQL的開源會有影響,所以開發(fā)了一些分支,比如: MariaDB和Percona。
PostgreSQL
PostgreSQL標榜自己是世界上最先進的開源數據庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那么昂貴的價格和傲慢的客服。最初是1985年在加利福尼亞大學伯克利分校開發(fā)的,作為Ingres數據庫的后繼。PostgreSQL是完全由社區(qū)驅動的開源項目。它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發(fā)代碼,只需要提供一個版權聲明即可。
MySQL與PostgreSQL的對比
MySQL的背后是一個成熟的商業(yè)公司,而PostgreSQL的背后是一個龐大的志愿開發(fā)組。這使得MySQL的開發(fā)過程更為慎重,而PostgreSQL的反應更為迅速。這樣的兩種背景直接導致了各自固有的優(yōu)點和缺點。
PostgreSQL相對于MySQL的優(yōu)勢
1)不僅僅是關系型數據庫
除了存儲正常的數據類型外,還支持存儲:
array,不管是一位數組還是多為數組均支持
json(hStore)和jsonb,相比使用text存儲接送要高效很多
json和jsonb之間的區(qū)別
jsonb和json在更高的層面上看起來幾乎是一樣的,但在存儲實現上是不同的。
json存儲完的文本,json列會每次都解析存儲的值,它不支持索引,但你可以為查詢創(chuàng)建表達式索引。
jsonb存儲的二進制格式,避免了重新解析數據結構。它支持索引,這意味著你可以不使用指定的索引就能查詢任何路徑。
當我們比較寫入數據速度時,由于數據存儲的方式的原因,jsonb會比json稍微的慢一點。json列會每次都解析存儲的值,這意味著鍵的順序要和輸入的時候一樣。但jsonb不同,以二進制格式存儲且不保證鍵的順序。因此,如果你有軟件需要依賴鍵的順序,jsonb可能不是你的應用的最佳選擇。使用jsonb的優(yōu)勢還在于你可以輕易的整合關系型數據和非關系型數據, PostgreSQL對于mongodb這類的基于文檔的數據庫是個不小的威脅,畢竟如果一個表中只有一列數據的類型是半結構化的,沒有必要為了遷就它而整個表的設計采用schemaless的結構。
2)支持地理信息處理擴展
PostGIS 為PostgreSQL提供了存儲空間地理數據的支持,使PostgreSQL成為了一個空間數據庫,能夠進行空間數據管理、數量測量與幾何拓撲分析。在功能上,和MYSQL對比,PostGIS具有下列優(yōu)勢:
O2O業(yè)務場景中的LBS業(yè)務使用PostgreSQL + PostGIS有無法比擬的優(yōu)勢。
3)可以快速構建REST API
PostgREST 可以方便的為任何 PostgreSQL 數據庫提供完全的 RESTful API 服務。
4)支持樹狀結構
支持R-trees這樣可擴展的索引類型,可以更方便地處理一些特殊數據。MySQL 處理樹狀的設計會很復雜, 而且需要寫很多代碼, 而 PostgreSQL 可以高效處理樹結構。
5)有極其強悍的 SQL 編程能力
支持遞歸,有非常豐富的統(tǒng)計函數和統(tǒng)計語法支持。
MySQL:支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲過程可以用 SQL 和 C++ 編寫。用戶定義函數可以用 SQL、C 和 C++ 編寫。
PostgreSQL:沒有單獨的存儲過程,都是通過函數實現的。用戶定義函數可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。
6)外部數據源支持
可以把 70 種外部數據源 (包括 Mysql, Oracle, CSV, hadoop …) 當成自己數據庫中的表來查詢。Postgres有一個針對這一難題的解決方案:一個名為“外部數據封裝器(Foreign Data Wrapper,FDW)”的特性。該特性最初由PostgreSQL社區(qū)領袖Dave Page四年前根據SQL標準SQL/MED(SQL Management of External Data)開發(fā)。FDW提供了一個SQL接口,用于訪問遠程數據存儲中的遠程大數據對象,使DBA可以整合來自不相關數據源的數據,將它們存入Postgres數據庫中的一個公共模型。這樣,DBA就可以訪問和操作其它系統(tǒng)管理的數據,就像在本地Postgres表中一樣。例如,使用FDW for MongoDB,數據庫管理員可以查詢來自文檔數據庫的數據,并使用SQL將它與來自本地Postgres表的數據相關聯。借助這種方法,用戶可以將數據作為行、列或JSON文檔進行查看、排序和分組。他們甚至可以直接從Postgres向源文檔數據庫寫入(插入、更細或刪除)數據,就像一個一體的無縫部署。也可以對Hadoop集群或MySQL部署做同樣的事。FDW使Postgres可以充當企業(yè)的中央聯合數據庫或“Hub”。
7)沒有字符串長度限制
一般關系型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能作為外部大數據訪問。而PostgreSQL的 TEXT 類型可以直接訪問,SQL語法內置正則表達式,可以索引,還可以全文檢索,或使用xml xpath。MySQL 的各種text字段有不同的限制,要手動區(qū)分 small text, middle text, large text… PostgreSQL 沒有這個限制,text 能支持各種大小。
8)支持圖結構數據存儲
沒有具體使用過,具體可以自己搜索下。參考鏈接:
9)支持窗口函數
窗口函數提供跨行相關的當前查詢行集執(zhí)行計算的能力。僅當調用跟著OVER子句的聚集函數,作為窗口函數;否則它們作為常規(guī)的聚合函數。窗口也是一種分組,但和 group by 的分組不同。窗口,可以提供分組之外,還可以執(zhí)行對每個窗口進行計算。可以相像成是group by 后,然后對每個分組進行計算,而不像Group by ,只是單純地分組。MySQL 不支持 OVER 子句, 而PostgreSQL支持。OVER 子句能簡單的解決 “每組取 top 5” 的這類問題。MySQL支持的SQL語法(ANSI SQL標準)的很小一部分。不支持遞歸查詢、通用表表達式(Oracle的with 語句)或者窗口函數(分析函數)。
10)對索引的支持更強
PostgreSQL 的可以使用函數和條件索引,這使得PostgreSQL數據庫的調優(yōu)非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。對于索引類型:
MySQL:取決于存儲引擎。MyISAM:BTREE,InnoDB:BTREE。
PostgreSQL:支持 B-樹、哈希、R-樹和 Gist 索引。
InnoDB的表和索引都是按相同的方式存儲。也就是說表都是索引組織表。這一般要求主鍵不能太長而且插入時的主鍵最好是按順序遞增,否則對性能有很大影響。PostgreSQL不存在這個問題。
索引類型方面,MySQL取決于存儲引擎。MyISAM:BTREE,InnoDB:BTREE。PostgreSQL支持 B-樹、哈希、R-樹和 Gist 索引。
11)集群支持更好
Mysql Cluster可能與你的想象有較大差異。開源的cluster軟件較少。復制(Replication)功能是異步的并且有很大的局限性。例如,它是單線程的(single-threaded),因此一個處理能力更強的Slave的恢復速度也很難跟上處理能力相對較慢的Master。
PostgreSQL有豐富的開源cluster軟件支持。plproxy 可以支持語句級的鏡像或分片,slony 可以進行字段級的同步設置,standby 可以構建WAL文件級或流式的讀寫分離集群,同步頻率和集群策略調整方便,操作非常簡單。
另外,PostgreSQL的主備復制屬于物理復制,相對于MySQL基于binlog的邏輯復制,數據的一致性更加可靠,復制性能更高,對主機性能的影響也更小。對于WEB應用來說,復制的特性很重要,mysql到現在也是異步復制,pgsql可以做到同步,異步,半同步復制。還有mysql的同步是基于binlog復制,類似oracle golden gate,是基于stream的復制,做到同步很困難,這種方式更加適合異地復制,pgsql的復制基于wal,可以做到同步復制。同時,pgsql還提供stream復制。
12)事務隔離做的更好
MySQL 的事務隔離級別 repeatable read 并不能阻止常見的并發(fā)更新, 得加鎖才可以, 但悲觀鎖會影響性能, 手動實現樂觀鎖又復雜. 而 PostgreSQL 的列里有隱藏的樂觀鎖 version 字段, 默認的 repeatable read 級別就能保證并發(fā)更新的正確性, 并且又有樂觀鎖的性能。
13)對于字符支持更好一些
MySQL 里需要 utf8mb4 才能顯示 emoji 的坑, PostgreSQL 沒這個坑。
14)對表連接支持較完整
對表連接支持較完整,MySQL只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。PostgreSQL都支持。
15)存儲方式支持更大的數據量
PostgreSQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數據量。
16)時間精度更高
MySQL對于時間、日期、間隔等時間類型沒有秒以下級別的存儲類型,而PostgreSQL可以精確到秒以下。
17)優(yōu)化器的功能較完整
MySQL對復雜查詢的處理較弱,查詢優(yōu)化器不夠成熟,explain看執(zhí)行計劃的結果簡單。性能優(yōu)化工具與度量信息不足。
PostgreSQL很強大的查詢優(yōu)化器,支持很復雜的查詢處理。explain返回豐富的信息。提供了一些性能視圖,可以方便的看到發(fā)生在一個表和索引上的select、delete、update、insert統(tǒng)計信息,也可以看到cache命中率。網上有一個開源的pgstatspack工具。
18)序列支持更好
MySQL 不支持多個表從同一個序列中取 id, 而 PostgreSQL 可以。
19)對子查詢支持更好
對子查詢的支持。雖然在很多情況下在SQL語句中使用子查詢效率低下,而且絕大多數情況下可以使用帶條件的多表連接來替代子查詢,但是子查詢的存在在很多時候仍然不可避免。而且使用子查詢的SQL語句與使用帶條件的多表連接相比具有更高的程序可讀性。幾乎任何數據庫的子查詢 (subquery) 性能都比 MySQL 好。
20)增加列更加簡單
MySQL表增加列,基本上是重建表和索引,會花很長時間。PostgreSQL表增加列,只是在數據字典中增加表定義,不會重建表.
MySQL相對于PostgreSQL的優(yōu)勢
1)MySQL比PostgreSQL更流行
流行對于一個商業(yè)軟件來說,也是一個很重要的指標,流行意味著更多的用戶,意味著經受了更多的考驗,意味著更好的商業(yè)支持、意味著更多、更完善的文檔資料。易用,很容易安裝。第三方工具,包括可視化工具,讓用戶能夠很容易入門。
2)回滾實現更優(yōu)
innodb的基于回滾段實現的MVCC機制,相對PG新老數據一起存放的基于XID的MVCC機制,是占優(yōu)的。新老數據一起存放,需要定時觸發(fā)VACUUM,會帶來多余的IO和數據庫對象加鎖開銷,引起數據庫整體的并發(fā)能力下降。而且VACUUM清理不及時,還可能會引發(fā)數據膨脹。
3)在Windows上運行更可靠
與PostgreSQL相比,MySQL更適宜在Windows環(huán)境下運行。MySQL作為一個本地的Windows應用程序運行(在 NT/Win2000/WinXP下,是一個服務),而PostgreSQL是運行在Cygwin模擬環(huán)境下。PostgreSQL在Windows下運行沒有MySQL穩(wěn)定,應該是可以想象的。
4)線程模式相比進程模式的優(yōu)勢
MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環(huán)境轉換和訪問公用的存儲區(qū)域顯然要比在不同的進程之間要快得多。
進程模式對多CPU利用率比較高。進程模式共享數據需要用到共享內存,而線程模式數據本身就是在進程空間內都是共享的,不同線程訪問只需要控制好線程之間的同步。
線程模式對資源消耗比較少。所以MySQL能支持遠比PostgreSQL多的更多的連接。但PostgreSQL中有優(yōu)秀的連接池軟件軟件,如pgbouncer和pgpool,所以通過連接池也可以支持很多的連接。
5)權限設置上更加完善
MySQL在權限系統(tǒng)上比PostgreSQL某些方面更為完善。PostgreSQL只支持對于每一個用戶在一個數據庫上或一個數據表上的 INSERT、SELECT和UPDATE/DELETE的授權,而MySQL允許你定義一整套的不同的數據級、表級和列級的權限。對于列級的權限, PostgreSQL可以通過建立視圖,并確定視圖的權限來彌補。MySQL還允許你指定基于主機的權限,這對于目前的PostgreSQL是無法實現的,但是在很多時候,這是有用的。
6)存儲引擎插件化機制
MySQL的存儲引擎插件化機制,使得它的應用場景更加廣泛,比如除了innodb適合事務處理場景外,myisam適合靜態(tài)數據的查詢場景。
7)適應24/7運行
MySQL可以適應24/7運行。在絕大多數情況下,你不需要為MySQL運行任何清除程序。PostgreSQL目前仍不完全適應24/7運行,這是因為你必須每隔一段時間運行一次VACUUM。
8)更加試用于簡單的場景
PostgreSQL只支持堆表,不支持索引組織表,Innodb只支持索引組織表。
索引組織表的優(yōu)勢:表內的數據就是按索引的方式組織,數據是有序的,如果數據都是按主鍵來訪問,那么訪問數據比較快。而堆表,按主鍵訪問數據時,是需要先按主鍵索引找到數據的物理位置。
索引組織表的劣勢:索引組織表中上再加其它的索引時,其它的索引記錄的數據位置不再是物理位置,而是主鍵值,所以對于索引組織表來說,主鍵的值不能太大,否則占用的空間比較大。
對于索引組織表來說,如果每次在中間插入數據,可能會導致索引分裂,索引分裂會大大降低插入的性能。所以對于使用innodb來說,我們一般最好讓主鍵是一個無意義的序列,這樣插入每次都發(fā)生在最后,以避免這個問題。
由于索引組織表是按一個索引樹,一般它訪問數據塊必須按數據塊之間的關系進行訪問,而不是按物理塊的訪問數據的,所以當做全表掃描時要比堆表慢很多,這可能在OLTP中不明顯,但在數據倉庫的應用中可能是一個問題。
總結
MySQL從一開始就沒有打算做所有事情,因而它在功能方面有一定的局限性,并不能滿足一些先進應用程序的要求。MySQL對某些功能(例如引用、事務、審計等)的實現方式使得它與其他的關系型數據庫相比缺少了一些可靠性。對于簡單繁重的讀取操作,使用PostgreSQL可能有點小題大做,同時性能也比MySQL這樣的同類產品要差。除非你需要絕對的數據完整性,ACID遵從性或者設計復雜,否則PostgreSQL對于簡單的場景而言有點多余。
如何你確定只在MySQL和PostgreSQL中進行選擇,以下規(guī)則總是有效的:
如果你的操作系統(tǒng)是Windows,你應該使用MySQL。
當絕對需要可靠性和數據完整性的時候,PostgreSQL是更好的選擇。
如果需要數據庫執(zhí)行定制程序,那么可擴展的PostgreSQL是更好的選擇。
你的應用處理的是地理數據,由于R-TREES的存在,你應該使用PostgreSQL。
如果你對數據庫并不了十分了解,甚至不知道事務、存儲過程等究竟是什么,你應該使用MySQL。
文章名稱:postgresql好嗎的簡單介紹
分享路徑:http://www.chinadenli.net/article36/dsdgspg.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站策劃、定制網站、微信小程序、小程序開發(fā)、用戶體驗、Google
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯