PostgreSQL幾乎支持所有的SQL標準,支持的類型也相當豐富。PostgreSQL數據庫的源代碼比MySQL數據庫的源代碼更容易閱讀。如果團隊有很強的C語言能力,可以在PostgreSQL數據庫上進行開發,例如實現壹個類似於greenplum的系統,這也可以符合當前的分布式趨勢。
為了說明PostgreSQL的功能,下面從“從Oracle遷移到MySQL之前必須知道的50件事”中對PostgreSQL數據庫和Mysql數據庫進行簡要比較。
從Oracle遷移到Mysql的50個困難,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 =:aintersectSelect * 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的查詢速度更快,更適合業務邏輯相對簡單、數據可靠性要求不高的互聯網場景。以上個人意見,歡迎批評指正。
同意我的觀點,請喜歡再走,謝謝!
如果妳喜歡我,請關註我。再次感謝!