PostgreSQL幾乎支持所有的SQL標準,支持的類型也相當豐富。PostgreSQL數據庫的源代碼比MySQL數據庫的源代碼更容易讀懂。如果團隊有很強的C語言能力,可以在PostgreSQL數據庫上開發,比如實現壹個類似greenplum的系統,也可以符合現在分布式的趨勢。
為了說明PostgreSQL的功能,下面從“從Oracle遷移到MySQL之前妳必須知道的50件事”中簡單對比壹下PostgreSQL數據庫和Mysql數據庫。
50從Oracle遷移到Mysql的困難,1,子查詢性能差。(PostgreSQL可以求解)
2.復雜查詢的處理能力較弱。(PostgreSQL可以求解)
3.查詢優化器還不夠成熟。(PostgreSQL可以求解)
PostgreSQL完全支持SQL-92標準和SQL,可以支持復雜的SQL查詢。
4.性能優化工具和測量信息不足。(PostgreSQL可以求解)
PostgreSQL提供了執行計劃和詳細的開銷值,很容易看出SQL的執行效率。
5.審計功能相對較弱。
6.安全功能不成熟,沒有用戶組和角色的概念,沒有回收權限的功能(只能授予權限)。當壹個用戶從不同的主機/網絡使用相同的用戶名/密碼登錄時,可能會被當作完全不同的用戶,沒有類似Oracle的內置加密功能。
7.認證功能完全內置,不支持LDAP、ActiveDirectory或其他類似的外部認證功能。
8.MysqlCluster可能和妳想的大不壹樣。
9.存儲過程和觸發器的功能是有限的。(PostgreSQL可以求解)
PostgreSQL提供了對存儲過程和觸發器的完整支持。
10,垂直擴展性弱。
11,不支持MPP(大規模並行處理)。(PostgreSQL可以求解)
PostgreSQL是類似Oracle數據庫的多進程架構,不像MySQL是多線程架構,所以可以支持MPP。
12,支持SMP(對稱多處理器),但如果每個處理器都是4核或8核以上,Mysql的可擴展性很差。
13.對於時間、日期和間隔等時間類型,秒以下沒有存儲類型。
14,可以用來寫存儲過程、觸發器、預定事件、存儲函數的語言函數比較弱。
15,沒有基於回滾的恢復功能,只有前滾恢復功能。
16.不支持快照功能。
17.不支持databaselink。有壹個名為Federated的存儲引擎,它可以用作將查詢語句傳輸到遠程服務器中的表的中繼。但其功能粗糙,漏洞很多。
18,數據完整性檢查非常薄弱,連基本的完整性約束往往都沒有實現。(PostgreSQL可以求解)
PostgreSQL提供了完整的數據完整性檢查機制,並支持外鍵。
19.很少有優化器提示來優化查詢語句的執行計劃。
20.只有壹種表聯接類型:不支持嵌套循環、排序合並聯接和哈希聯接。(PostgreSQL可以求解)
PostgreSQL支持這些表連接類型。
21,大多數查詢只能在表上使用單個索引;在某些情況下,會有使用多個索引的查詢,但是查詢優化器通常會低估其成本,並且它們通常比表掃描慢。(PostgreSQL可以求解)
PostgreSQL數據不存在這個問題。假設表T中col1的col2上有兩個索引,idx_1和idx_2,那麽select * from where col 1 =:aandcol 2 =:b;查詢時,PostgreSQL數據庫可能會將此查詢轉換為Select * from where col 1 =:ainterectselect * from where col 2 =:b,這樣兩個索引都可以使用。
22.不支持bitmapindex。每個存儲引擎支持不同類型的索引。大多數存儲引擎支持B樹索引。
23.管理工具少,功能不夠成熟。
24.沒有成熟的、令人滿意的IDE工具和調試程序。您可能必須在文本編輯器中編寫存儲過程,並通過將記錄插入表(調試日誌表)來調試它們。
25.每個表可以使用不同的存儲引擎。(PostgreSQL可以求解)
26.每個存儲引擎在行為、特征和功能上可能有很大差異。(PostgreSQL可以求解)
27.大多數存儲引擎不支持外鍵。(PostgreSQL可以求解)
28.默認存儲引擎(MyISAM)不支持事務,並且很容易損壞。(PostgreSQL可以求解)
29.InnoDB是最先進、最受歡迎的存儲引擎,歸甲骨文所有。(PostgreSQL可以求解)
30.壹些執行計劃僅支持特定的存儲引擎。某壹類型的計數查詢在此存儲引擎中很快,而在另壹個存儲引擎中可能很慢。(PostgreSQL可以求解)
PostgreSQL只有壹個存儲引擎,所以不存在上述情況。PostgreSQL支持完美的事務。
31.執行計劃不是全局共享的,而只是在連接內部共享。
32.全文搜索功能是有限的,它只適用於非事務性存儲引擎。同上用於GIS/空間類型和查詢。(PostgreSQL可以求解)
PostgreSQL數據庫支持全文搜索和更多類型的索引,如B樹、R樹、Hash、GIST、GIN、R樹、GiST和GIN索引,可用於空間類型和查詢。
33.沒有資源控制。完全未經授權的用戶可以輕易地耗盡服務器的所有內存並使其崩潰,或者耗盡所有CPU資源。
34、沒有集成businessintelligence)、OLAP** * *數據集等軟件包。
35.沒有類似GridControl的工具。
36.沒有類似RAC的功能。如果妳問“如何用Mysql構造RAC”,只能說妳問錯了問題。
37.不支持用戶定義的類型或域。(PostgreSQL可以求解)
PostgreSQL支持豐富類型和自定義類型。
38.每個查詢支持的最大連接數是61。
39.MySQL支持的壹小部分SQL語法(ANSISQL標準)。不支持遞歸查詢、通用表表達式(Oracle with語句)或窗口函數(分析函數)。支持壹些類似Merge的SQL語法擴展或者類似的功能,但是功能相對Oracle來說非常簡單。(PostgreSQL可以求解)
這些PostgreSQL數據庫都支持,比如窗口函數。
40.不支持函數列(基於計算或表達式的列,Oracle11g開始支持計算列,早期版本支持rownum,rowid))。
41.不支持函數索引,只能創建基於特定列的索引。(PostgreSQL可以求解)
PostgreSQL支持函數索引。
42.不支持實體化視圖。
43.不同存儲引擎之間的統計信息差異很大,所有存儲引擎都只支持簡單的基數和壹定範圍的記錄(範圍內的行)。換句話說,數據分布統計是有限的。更新統計信息的機制不多。
44.沒有內置的負載平衡和故障轉移機制。
45.復制功能是異步的,有很大的局限性。比如它是單線程的,所以處理能力較強的從機很難比處理能力相對較慢的主機恢復得更快。
46.集群並沒有想象中的那麽完美。也許我已經提到了這壹點,但它值得重復。
47.數據字典(INFORMATION_SCHEMA)的功能非常有限,訪問速度非常慢(在繁忙的系統上很容易崩潰)。
48.不支持聯機更改表操作。
49.不支持序列。(PostgreSQL可以求解)
PostgreSQL支持序列。
50.像ALTERTABLE或CREATETABLE這樣的操作是非事務性的。他們將提交未提交的事務,並且不能回滾或進行災難恢復。Schame保存在文件系統上,不管它使用什麽存儲引擎。(PostgreSQL可以求解)
PostgreSQL沒有這個問題。
每個數據庫都有不同的應用場景。PostgreSQL可靠性更高,對數據壹致性和完整性的支持高於MySQL。所以PostgreSQL更適合嚴格的企業應用場景,MySQL查詢速度更快,更適合業務邏輯相對簡單,數據可靠性要求不高的互聯網場景。以上個人觀點,歡迎批評指正。
同意我的看法,請喜歡再走,謝謝!
如果妳喜歡我,請關註我。再次感謝!