{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

PostgreSQL與MySQL相比,優勢何在?

BothEyes1993BothEyes1993 回答0 收藏1
收藏問題

9條回答

gaosboy

gaosboy

回答于2022-06-28 13:57

PostgreSQL類似于Oracle的多進程框架,可以支持高并發的應用場景。

如果把Oracle DBA轉到PostgreSQL數據庫上是比較容易的,畢竟PostgreSQL數據庫與Oracle數據庫很相似。

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提供了執行計劃和詳細的cost值,可以方便看到SQL的執行效率。

5、 審計功能相對較弱。

6、 安全功能不成熟,沒有用戶組與角色的概念,沒有回收權限的功能(僅可以授予權限)。當一個用戶從不同的主機/網絡以同樣的用戶名/密碼登錄之后,可能被當作完全不同的用戶來處理,沒有類似于Oracle的內置的加密功能。

7、 身份驗證功能是完全內置的,不支持LDAP、Active Directory或其它類似的外部身份驗證功能。

8、 Mysql Cluster可能與你想象的有較大差異。

9、 存儲過程與觸發器的功能有限。(PostgreSQL可解決)

PostgreSQL提供了完善的存儲過程和觸發器支持。

10、 垂直擴展性較弱。

11、 不支持MPP(大規模并行處理)。(PostgreSQL可解決)

PostgreSQL是類似Oracle數據庫的多進程架構,而不像MySQL是多線程的架構,所以能支持MPP。

12、 支持SMP(對稱多處理器),但是如果每個處理器超過4或8個核(core)時,Mysql的擴展性表現較差。

13、 對于時間、日期、間隔等時間類型沒有秒以下級別的存儲類型。

14、 可用來編寫存儲過程、觸發器、計劃事件以及存儲函數的語言功能較弱。

15、 沒有基于回滾(roll-back)的恢復功能,只有前滾(roll-forward)的恢復功能。

16、 不支持快照功能。

17、 不支持數據庫鏈(database link)。有一種叫做Federated的存儲引擎可以作為一個中轉將查詢語句傳遞到遠程服務器的一個表上,不過,它功能很粗糙并且漏洞很多。

18、 數據完整性檢查非常薄弱,即使是基本的完整性約束,也往往不能執行。(PostgreSQL可解決)

PostgreSQL提供完善的數據完整性檢查機制,支持外鍵。

19、 優化查詢語句執行計劃的優化器提示非常少。

20、 只有一種表連接類型:嵌套循環連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。(PostgreSQL可解決)

PostgreSQL則支持這些表連接類型。

21、 大部分查詢只能使用表上的單一索引;在某些情況下,會存在使用多個索引的查詢,但是查詢優化器通常會低估其成本,它們常常比表掃描還要慢。(PostgreSQL可解決)

PostgreSQL數據不存在這個問題,假設表T的兩個字段col1的col2上有兩個索引,idx_1和idx_2,那么select * from t where col1=:a and col2=:b;查詢時,PostgreSQL數據庫有可能把這個查詢轉化為select * from t where col1=:a intersect select * from t where col2=:b,這樣兩個索引都可以使用上。

22、不支持位圖索引(bitmap index)。每種存儲引擎都支持不同類型的索引。大部分存儲引擎都支持B-Tree索引。

23、 管理工具較少,功能也不夠成熟。

24、沒有成熟能夠令人滿意的IDE工具與調試程序。可能不得不在文本編輯器中編寫存儲過程,并且通過往表(調試日志表)中插入記錄的方式來做調試。

25、 每個表都可以使用一種不同的存儲引擎。(PostgreSQL可解決)

26、 每個存儲引擎在行為表現、特性以及功能上都可能有很大差異。(PostgreSQL可解決)

27、大部分存儲引擎都不支持外鍵。(PostgreSQL可解決)

28、默認的存儲引擎(MyISAM)不支持事務,并且很容易損壞。(PostgreSQL可解決)

29、最先進最流行的存儲引擎InnoDB由Oracle擁有。(PostgreSQL可解決)

30、有些執行計劃只支持特定的存儲引擎。特定類型的Count查詢,在這種存儲引擎中執行很快,在另外一種存儲引擎中可能會很慢。(PostgreSQL可解決)

PostgreSQL只有一種存儲引擎,所以不存在上面的情況。而PostgreSQL支持完善的事務。

31、執行計劃并不是全局共享的,,僅僅在連接內部是共享的。

32、全文搜索功能有限, 只適用于非事務性存儲引擎。 Ditto用于地理信息系統/空間類型和查詢。(PostgreSQL可解決)

PostgreSQL數據庫支持全文搜索,支持更多類型的索引,如B-tree,R-tree, Hash, GiST, GIN,R-tree,GIST,GIN索引可用于空間類型和查詢。

33、沒有資源控制。一個完全未經授權的用戶可以毫不費力地耗盡服務器的所有內存并使其崩潰,或者可以耗盡所有CPU資源。

34、沒有集成商業智能(business intelligence), OLAP **數據集等軟件包。

35、 沒有與Grid Control類似的工具

36、 沒有類似于RAC的功能。如果你問”如何使用Mysql來構造RAC”,只能說你問錯了問題。

37、不支持用戶自定義類型或域(domain)。(PostgreSQL可解決)

PostgreSQL支持豐富的類型,同時也支持自定義類型。

38、 每個查詢支持的連接的數量最大為61。

39、MySQL支持的SQL語法(ANSI SQL標準)的很小一部分。不支持遞歸查詢、通用表表達式(Oracle的with 語句)或者窗口函數(分析函數)。支持部分類似于Merge或者類似特性的SQL語法擴展,不過相對于Oracle來講功能非常簡單。(PostgreSQL可解決)

這些PostgreSQL數據庫都支持,如窗口函數。

40、不支持功能列(基于計算或者表達式的列,Oracle11g 開始支持計算列,以及早期版本就支持虛列(rownum,rowid))。

41、不支持函數索引,只能創建基于具體列的索引。(PostgreSQL可解決)

PostgreSQL支持函數索引。

42、不支持物化視圖。

43、不同的存儲引擎之間,統計信息差別很大,并且所有的存儲引擎支持的統計信息都只支持簡單的基數(cardinality)與一定范圍內的記錄數(rows-in-a-range)。 換句話說,數據分布統計信息是有限的。更新統計信息的機制也不多。

44、沒有內置的負載均衡與故障切換機制。

45、 復制(Replication)功能是異步的,并且有很大的局限性。例如,它是單線程的(single-threaded),因此一個處理能力更強的Slave的恢復速度也很難跟上處理能力相對較慢的Master。

46、 Cluster并不如想象的那么完美。或許我已經提過這一點,但是這一點值得再說一遍。

47、數據字典(INFORMATION_SCHEMA)功能很有限,并且訪問速度很慢(在繁忙的系統上還很容易發生崩潰)。

48、不支持在線的Alter Table操作。

49、 不支持Sequence。(PostgreSQL可解決)

PostgreSQL支持sequence。

50、 類似于ALTER TABLE或CREATE TABLE一類的操作都是非事務性的。它們會提交未提交的事務,并且不能回滾也不能做災難恢復。Schame被保存在文件系統上,這一點與它使用的存儲引擎無關。(PostgreSQL可解決)

PostgreSQL不存在這個問題。

每種數據庫都有不同的應用場景

  • PostgreSQL具備了更高的可靠性,對數據一致性、完整性的支持高于MySQL,因此PostgreSQL更加適合嚴格的企業應用場景,
  • MySQL查詢速度較快,更適合業務邏輯相對簡單、數據可靠性要求較低的互聯網場景。

以上個人淺見,歡迎批評指正。

認同我的看法,請點個贊再走,感謝!

喜歡我的,請關注我,再次感謝!

評論0 贊同0
  •  加載中...
toddmark

toddmark

回答于2022-06-28 13:57

很高興能夠看到和回答這個問題!

選擇適合企業的數據庫需要相當的規劃,因為未來的選擇將是困難的,而且成本很高。 因此,必須在第一時間做出正確的選擇。 MySQL和PostgreSQL是兩個最流行的開源數據庫,這往往是數據庫管理員托管的最后兩個數據庫。 下面檔將對兩種開源數據庫進行分析和比較,幫助您選擇符合您操作需求的數據庫。

PostgreSQL與MySQL相比,優勢何在?

可靠性是PostgreSQL的主要目標之一。 我們都知道PostgreSQL的功能很強大,而且基礎很好,能夠支持任務和關鍵任務。 PostgreSQL提供高質量的文檔服務,包括完整的免費在線手冊和舊版手冊的存檔。 社區支持非常有效,獨立公司也提供了商業支持。 Mysql和pgsql出現在一些高流量的網站上,可用于大型分布式系統,所有支持服務,支持有效性指數。 Mysql支持嵌入式應用,pgsql仍然支持傳統的B/S架構。 MySQL可以產生快速的讀取訪問和各種查詢,但具有復雜的屬性和數據完整性檢查,并不完全令人滿意:pgsql是業務類的,針對MyISAM硬盤上的mysql開發的,因為很少進行數據完整性檢查,所以對于敏感數據、快節奏、高讀寫要求的數據,ACID支持InnoDB功能是最好的選擇,而且pgsql是一個完全集成的數據庫,只有一個存儲引擎。

確保數據的一致性和完整性也是PostgreSQL的重中之重,PostgreSQL數據庫完全符合ACID原則(原子性、一致性、隔離性和耐久性)。

PostgreSQL對數據庫的訪問提供了強大的安全控制,不僅使用了Kerberos和OpenSSL等先進的企業安全工具,還根據業務需求定制了認證方法,以確保數據質量。 數據庫管理員最鐘愛的功能是時間恢(PITR),它提供了靈活性和高可用性,允許你快速創建故障轉移服務器,在特定時間快速捕獲和恢復。 但這還不是全部。 該項目提供了各種PostgreSQL管理技術,使PostgreSQL能夠提供高可用性、負載均衡和同步,這樣你就可以使用這些功能來滿足你的特定需求。 Pgsql有非常強大的sql編程功能,有非常豐富的統計功能和統計語法,可以多語言編寫過程,r的支持也非常好,這個mysql會從mysql的數據中心刪除和處理,但是數據分析主要是Hadoop+PGSQL。當我們使PostgreSQL對數據庫時,看的見的文件僅僅是文件嗎?

非常穩定的系統PostgreSQL,如Innodb等引擎,在應對停電等極端沖擊方面取得了顯著的進步,但很多MySQL用戶卻面臨著服務器上數據庫不足的問題--MySQL庫是MyISAM,它的性能稍微好一些

任何系統都有一個性能極限,在高讀寫速度下,當負載接近時,PG效率指數可以保持一個雙曲線甚至對數曲線,峰值不會下降。

對于WEB應用來說,屬性復制是非常重要的。 MySQL也是異步復制,pgsql可以同步、異步、半同步復制。 還有基于sync mysql復制binlog如oracle金門,基于jet復制,難以同步,所以比較適合復制,基于pgsql的wal復制,可以同步。 此外,pgsql還提供噴墨復制器。 Pgsql支持numa架構比mysql略好,不是讀MYSQL的特點,pgsql可以完全異步,mysql的內存表不夠實用!PostgresqI數據庫安全測試與實踐如下如所示:


Pgsql有多種集群結構可以選擇,plproxy可以保持鏡像或背光操作者的級別,slony可以在字段級設置同步級別,standby可以創建WAL集群分區文件,同步頻率和集群策略可以輕松改變,操作非常簡單;mysql發酵簡單,系統表、操作者、可執行數據類型非常簡單,非常容易簡單查詢。

Mysql分區表應該比Pgsql分區基于繼承表更好。 它是R樹中使用的索引,但空間功能在pgsql中并不豐富,而且空間訪問速度比pgsql慢;pgsql更適合比較嚴格的業務場景,如金融、電信、ERP、CRM等。 MySQL比較適合互聯網場景,比如google、Facebook、淘寶等。

總結:

答案寫到這里,我想您應該明白了,PostgreSQL與MySQL相比各有千秋,兩者都是世界上非常先進的數據庫管理軟件,通過使用PostgreSQL與MySQL,企業可以非常方便地管理內部數據。Mysql分區表應該比Pgsql分區基于繼承表更好。而PostgreSQL數據庫完全符合ACID原則(原子性、一致性、隔離性和耐久性) 并且PostgreSQL提供高質量的文檔服務,包括完整的免費在線手冊和舊版手冊的存檔。可以看出,未來必將會有更多的廠商或者企業選擇PostgreSQL。

以上便是我的一些見解和回答,可能不能如您所愿,但我真心希望能夠對您有所幫助!不清楚的地方您還可以關注我的頭條號“每日精彩科技”我將竭盡所知幫助您!

碼字不易,感覺寫的還行的話,還請點個贊哦!

評論0 贊同0
  •  加載中...
changfeng1050

changfeng1050

回答于2022-06-28 13:57

PostgreSQL不是Oracle公司的,這是相對于MySQL最大的優勢,沒有之一!

MySQL是目前最受歡迎的開源數據庫,PostgreSQL則是我認為最先進的開源數據庫。MySQL是C/C++混合開發,PostgreSQL則是完全的C語言開發,這是在技術方面的差異,接下來我詳細列一下PostgreSQL相對于MySQL優勢,當然其實這些也都能招到,我就列舉幾個比較關鍵的優勢。

PostgreSQL穩定性非常強,InnoDB即使是在斷電這種場景下,PostgreSQL也是相當穩定的,這個MySQL用戶應該是深有體會的,很多估計都經歷過服務器級別的數據丟失。

MySQL是單存儲引擎,PostgreSQL是多存儲引擎,包括InnoDB、MyISAM等。

刪除臨時表的時候,PostgreSQL語句沒有TEMP、TEMPORARY關鍵字,DROP TABLE通過數據庫連接的排列被刪除。MySQL支持TEMP、TEMPORARY關鍵字,DROP TABLE語句只允許刪除臨時表,要手動刪除。PostgreSQL支持CASCADE選擇刪除表的依賴對象,PostgreSQL的TRUNCATE TABLE支持功能更多。MySQL TRUNCATE TABLE不支持CASCADE食物安全,數據刪除之后就沒辦法回滾了。


PostgreSQL支持多種高級數據類型,比如array,用戶也可以定義類型,MySQL只支持標準類型。PostgreSQL支持布爾型,支持IP地址數據類型,支持常量和函數調用。PostgreSQL支持JSON和其他NoSQL功能,本機支持XML,允許索引JSON數據,MySQL支持JSON,不過不支持其他的NoSQL功能。PostgreSQL的對象統計功能也很強,這一點MySQL也有差距。

PostgreSQL是多進程、MySQL是多線程。PostgreSQL支持大多數命令類型上觸發的觸發器。MySQL是異步復制,PostgreSQL支持同步、異步、半同步復制。PostgreSQL要求所有數據必須完全滿足需求,只要出一個錯誤整個數據入庫過程都要失敗,不過MySQL沒這樣的問題。

最后一個優勢,也是我在文章開頭說到的,也是我認為最大的優勢,MySQL誕生于商業公司,現在是讓人生厭的Oracle控制,盡管MySQL現在依然是開源免費的,可是在Oracle手里總是會讓人擔心。Java在oracle手機搞了些啥大家應該都知道吧,現在Oracle動不動出來惡心惡心大家,反正甲骨文是個不靠譜的公司,隨時想要搞點事情。

PostgreSQL則是誕生于加州伯克利,伯克利還是對計算機技術有過突出貢獻的高校的,PostgreSQL、FreeBSD都是非常有代表性的,這個不會存在像Oracle那么惡心,所以這個也是一個極大的優勢。

評論0 贊同0
  •  加載中...
Jeffrrey

Jeffrrey

回答于2022-06-28 13:57

一、 PostgreSQL 的穩定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步,然而很多 MySQL 用戶都遇到過Server級的數據庫丟失的場景——mysql系統庫是MyISAM的,相比之下,PG數據庫這方面要好一些。
二、任何系統都有它的性能極限,在高并發讀寫,負載逼近極限下,PG的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之后不再下降,而 MySQL 明顯出現一個波峰后下滑(5.5版本之后,在企業級版本中有個插件可以改善很多,不過需要付費)。
三、PG 多年來在 GIS 領域處于優勢地位,因為它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型,相比之下mysql就差很多,instagram就是因為PG的空間數據庫擴展POSTGIS遠遠強于MYSQL的my spatial而采用PGSQL的。
四、PG 的“無鎖定”特性非常突出,甚至包括 vacuum 這樣的整理數據空間的操作,這個和PGSQL的MVCC實現有關系。
五、PG 的可以使用函數和條件索引,這使得PG數據庫的調優非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
六、PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統計函數和統計語法支持,比如分析函數(ORACLE的叫法,PG里叫window函數),還可以用多種語言來寫存儲過程,對于R的支持也很好。這一點上MYSQL就差的很遠,很多分析功能都不支持,ucloud內部數據存儲主要是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引擎,可以充分優化利用系統所有內存,超大內存下PG對內存使用的不那么充分,
第三點,MySQL的復制可以用多級從庫,但是在9.2之前,PGSQL不能用從庫帶從庫。
第四點,從測試結果上看,mysql 5.5的性能提升很大,單機性能強于pgsql,5.6應該會強更多.
第五點,對于web應用來說,mysql 5.6 的內置MC API功能很好用,PGSQL差一些。
另外一些:
pgsql和mysql都是背后有商業公司,而且都不是一個公司。大部分開發者,都是拿工資的。
說mysql的執行速度比pgsql快很多是不對的,速度接近,而且很多時候取決于你的配置。
對于存儲過程,函數,視圖之類的功能,現在兩個數據庫都可以支持了。
另外多線程架構和多進程架構之間沒有絕對的好壞,oracle在unix上是多進程架構,在windows上是多線程架構。
很多pg應用也是24/7的應用,比如skype. 最近幾個版本VACUUM基本不影響PGSQL 運行,8.0之后的PGSQL不需要cygwin就可以在windows上運行。
至于說對于事務的支持,mysql和pgsql都沒有問題。

評論0 贊同0
  •  加載中...
Bamboy

Bamboy

回答于2022-06-28 13:57

PostgreSQL

PostgreSQL標榜自己是世界上最先進的開源數據庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那么昂貴的價格和傲慢的客服。最初是1985年在加利福尼亞大學伯克利分校開發的,作為Ingres數據庫的后繼。PostgreSQL是完全由社區驅動的開源項目。它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社區版、商業版與企業版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發代碼,只需要提供一個版權聲明即可。

MySQL

MySQL聲稱自己是最流行的開源數據庫。LAMP中的M指的就是MySQL。構建在LAMP上的應用都會使用MySQL,如WordPress、Drupal等大多數php開源程序。MySQL最初是由MySQL AB開發的,然后在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一些則是收費的。其核心代碼基于GPL許可,由于MySQL被控制在Oracle,社區擔心會對MySQL的開源會有影響,所以開發了一些分支,比如: MariaDB和Percona。

MySQL與PostgreSQL的對比

MySQL的背后是一個成熟的商業公司,而PostgreSQL的背后是一個龐大的志愿開發組。這使得MySQL的開發過程更為慎重,而PostgreSQL的反應更為迅速。這樣的兩種背景直接導致了各自固有的優點和缺點。

PostgreSQL相對于MySQL的優勢

1)不僅僅是關系型數據庫

除了存儲正常的數據類型外,還支持存儲:

array,不管是一位數組還是多為數組均支持

json(hStore)和jsonb,相比使用text存儲接送要高效很多

json和jsonb之間的區別

jsonb和json在更高的層面上看起來幾乎是一樣的,但在存儲實現上是不同的。

json存儲完的文本,json列會每次都解析存儲的值,它不支持索引,但你可以為查詢創建表達式索引。

jsonb存儲的二進制格式,避免了重新解析數據結構。它支持索引,這意味著你可以不使用指定的索引就能查詢任何路徑。

當我們比較寫入數據速度時,由于數據存儲的方式的原因,jsonb會比json稍微的慢一點。json列會每次都解析存儲的值,這意味著鍵的順序要和輸入的時候一樣。但jsonb不同,以二進制格式存儲且不保證鍵的順序。因此,如果你有軟件需要依賴鍵的順序,jsonb可能不是你的應用的最佳選擇。使用jsonb的優勢還在于你可以輕易的整合關系型數據和非關系型數據, PostgreSQL對于mongodb這類的基于文檔的數據庫是個不小的威脅,畢竟如果一個表中只有一列數據的類型是半結構化的,沒有必要為了遷就它而整個表的設計采用schemaless的結構。

2)支持地理信息處理擴展

PostGIS 為PostgreSQL提供了存儲空間地理數據的支持,使PostgreSQL成為了一個空間數據庫,能夠進行空間數據管理、數量測量與幾何拓撲分析。在功能上,和MYSQL對比,PostGIS具有下列優勢:

O2O業務場景中的LBS業務使用PostgreSQL + PostGIS有無法比擬的優勢。

3)可以快速構建REST API

PostgREST 可以方便的為任何 PostgreSQL 數據庫提供完全的 RESTful API 服務。

4)支持樹狀結構

支持R-trees這樣可擴展的索引類型,可以更方便地處理一些特殊數據。MySQL 處理樹狀的設計會很復雜, 而且需要寫很多代碼, 而 PostgreSQL 可以高效處理樹結構。

5)有極其強悍的 SQL 編程能力

支持遞歸,有非常豐富的統計函數和統計語法支持。

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社區領袖Dave Page四年前根據SQL標準SQL/MED(SQL Management of External Data)開發。FDW提供了一個SQL接口,用于訪問遠程數據存儲中的遠程大數據對象,使DBA可以整合來自不相關數據源的數據,將它們存入Postgres數據庫中的一個公共模型。這樣,DBA就可以訪問和操作其它系統管理的數據,就像在本地Postgres表中一樣。例如,使用FDW for MongoDB,數據庫管理員可以查詢來自文檔數據庫的數據,并使用SQL將它與來自本地Postgres表的數據相關聯。借助這種方法,用戶可以將數據作為行、列或JSON文檔進行查看、排序和分組。他們甚至可以直接從Postgres向源文檔數據庫寫入(插入、更細或刪除)數據,就像一個一體的無縫部署。也可以對Hadoop集群或MySQL部署做同樣的事。FDW使Postgres可以充當企業的中央聯合數據庫或“Hub”。

7)沒有字符串長度限制

一般關系型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能作為外部大數據訪問。而PostgreSQL的 TEXT 類型可以直接訪問,SQL語法內置正則表達式,可以索引,還可以全文檢索,或使用xml xpath。MySQL 的各種text字段有不同的限制,要手動區分 small text, middle text, large text… PostgreSQL 沒有這個限制,text 能支持各種大小。

8)支持圖結構數據存儲

沒有具體使用過,具體可以自己搜索下。參考鏈接:https://mp.weixin.qq.com/s/cjor82wgDu5gzDvTYpLDWw

9)支持窗口函數

窗口函數提供跨行相關的當前查詢行集執行計算的能力。僅當調用跟著OVER子句的聚集函數,作為窗口函數;否則它們作為常規的聚合函數。窗口也是一種分組,但和 group by 的分組不同。窗口,可以提供分組之外,還可以執行對每個窗口進行計算。可以想象成是group by 后,然后對每個分組進行計算,而不像Group by ,只是單純地分組。MySQL 不支持 OVER 子句, 而PostgreSQL支持。OVER 子句能簡單的解決 “每組取 top 5” 的這類問題。MySQL支持的SQL語法(ANSI SQL標準)的很小一部分。不支持遞歸查詢、通用表表達式(Oracle的with 語句)或者窗口函數(分析函數)。

10)對索引的支持更強

PostgreSQL 的可以使用函數和條件索引,這使得PostgreSQL數據庫的調優非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。對于索引類型:

MySQL:取決于存儲引擎。MyISAM:BTREE,InnoDB:BTREE。

PostgreSQL:支持 B-樹、哈希、R-樹和 Gist 索引。

InnoDB的表和索引都是按相同的方式存儲。也就是說表都是索引組織表。這一般要求主鍵不能太長而且插入時的主鍵最好是按順序遞增,否則對性能有很大影響。PostgreSQL不存在這個問題。

索引類型方面,MySQL取決于存儲引擎。MyISAM:BTREE,InnoDB:B+TREE。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 并不能阻止常見的并發更新, 得加鎖才可以, 但悲觀鎖會影響性能, 手動實現樂觀鎖又復雜. 而 PostgreSQL 的列里有隱藏的樂觀鎖 version 字段, 默認的 repeatable read 級別就能保證并發更新的正確性, 并且又有樂觀鎖的性能。

13)對于字符支持更好一些

MySQL 里需要 utf8mb4 才能顯示 emoji 的坑, PostgreSQL 沒這個坑。

14)對表連接支持較完整

對表連接支持較完整,MySQL只有一種表連接類型:嵌套循環連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。PostgreSQL都支持。

15)存儲方式支持更大的數據量

PostgreSQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數據量。

16)時間精度更高

MySQL對于時間、日期、間隔等時間類型沒有秒以下級別的存儲類型,而PostgreSQL可以精確到秒以下。

17)優化器的功能較完整

MySQL對復雜查詢的處理較弱,查詢優化器不夠成熟,explain看執行計劃的結果簡單。性能優化工具與度量信息不足。

PostgreSQL很強大的查詢優化器,支持很復雜的查詢處理。explain返回豐富的信息。提供了一些性能視圖,可以方便的看到發生在一個表和索引上的select、delete、update、insert統計信息,也可以看到cache命中率。網上有一個開源的pgstatspack工具。

18)序列支持更好

MySQL 不支持多個表從同一個序列中取 id, 而 PostgreSQL 可以。

19)對子查詢支持更好

對子查詢的支持。雖然在很多情況下在SQL語句中使用子查詢效率低下,而且絕大多數情況下可以使用帶條件的多表連接來替代子查詢,但是子查詢的存在在很多時候仍然不可避免。而且使用子查詢的SQL語句與使用帶條件的多表連接相比具有更高的程序可讀性。幾乎任何數據庫的子查詢 (subquery) 性能都比 MySQL 好。

20)增加列更加簡單

MySQL表增加列,基本上是重建表和索引,會花很長時間。PostgreSQL表增加列,只是在數據字典中增加表定義,不會重建表.

MySQL相對于PostgreSQL的優勢

1)MySQL比PostgreSQL更流行

流行對于一個商業軟件來說,也是一個很重要的指標,流行意味著更多的用戶,意味著經受了更多的考驗,意味著更好的商業支持、意味著更多、更完善的文檔資料。易用,很容易安裝。第三方工具,包括可視化工具,讓用戶能夠很容易入門。

2)回滾實現更優

innodb的基于回滾段實現的MVCC機制,相對PG新老數據一起存放的基于XID的MVCC機制,是占優的。新老數據一起存放,需要定時觸發VACUUM,會帶來多余的IO和數據庫對象加鎖開銷,引起數據庫整體的并發能力下降。而且VACUUM清理不及時,還可能會引發數據膨脹。

3)在Windows上運行更可靠

與PostgreSQL相比,MySQL更適宜在Windows環境下運行。MySQL作為一個本地的Windows應用程序運行(在 NT/Win2000/WinXP下,是一個服務),而PostgreSQL是運行在Cygwin模擬環境下。PostgreSQL在Windows下運行沒有MySQL穩定,應該是可以想象的。

4)線程模式相比進程模式的優勢

MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環境轉換和訪問公用的存儲區域顯然要比在不同的進程之間要快得多。

進程模式對多CPU利用率比較高。進程模式共享數據需要用到共享內存,而線程模式數據本身就是在進程空間內都是共享的,不同線程訪問只需要控制好線程之間的同步。

線程模式對資源消耗比較少。所以MySQL能支持遠比PostgreSQL多的更多的連接。但PostgreSQL中有優秀的連接池軟件軟件,如pgbouncer和pgpool,所以通過連接池也可以支持很多的連接。

5)權限設置上更加完善

MySQL在權限系統上比PostgreSQL某些方面更為完善。PostgreSQL只支持對于每一個用戶在一個數據庫上或一個數據表上的 INSERT、SELECT和UPDATE/DELETE的授權,而MySQL允許你定義一整套的不同的數據級、表級和列級的權限。對于列級的權限, PostgreSQL可以通過建立視圖,并確定視圖的權限來彌補。MySQL還允許你指定基于主機的權限,這對于目前的PostgreSQL是無法實現的,但是在很多時候,這是有用的。

6)存儲引擎插件化機制

MySQL的存儲引擎插件化機制,使得它的應用場景更加廣泛,比如除了innodb適合事務處理場景外,myisam適合靜態數據的查詢場景。

7)適應24/7運行

MySQL可以適應24/7運行。在絕大多數情況下,你不需要為MySQL運行任何清除程序。PostgreSQL目前仍不完全適應24/7運行,這是因為你必須每隔一段時間運行一次VACUUM。

8)更加試用于簡單的場景

PostgreSQL只支持堆表,不支持索引組織表,Innodb只支持索引組織表。

索引組織表的優勢:表內的數據就是按索引的方式組織,數據是有序的,如果數據都是按主鍵來訪問,那么訪問數據比較快。而堆表,按主鍵訪問數據時,是需要先按主鍵索引找到數據的物理位置。

索引組織表的劣勢:索引組織表中上再加其它的索引時,其它的索引記錄的數據位置不再是物理位置,而是主鍵值,所以對于索引組織表來說,主鍵的值不能太大,否則占用的空間比較大。

對于索引組織表來說,如果每次在中間插入數據,可能會導致索引分裂,索引分裂會大大降低插入的性能。所以對于使用innodb來說,我們一般最好讓主鍵是一個無意義的序列,這樣插入每次都發生在最后,以避免這個問題。

由于索引組織表是按一個索引樹,一般它訪問數據塊必須按數據塊之間的關系進行訪問,而不是按物理塊的訪問數據的,所以當做全表掃描時要比堆表慢很多,這可能在OLTP中不明顯,但在數據倉庫的應用中可能是一個問題。

評論0 贊同0
  •  加載中...
zoomdong

zoomdong

回答于2022-06-28 13:57

當我們選擇哪種數據庫對我們的項目最合適時,必須在數據庫之間進行比較。PostgreSQL和MySQL都是開源社區提供的兩種最廣泛的數據庫。這兩個數據庫都有其優點和缺點,因此更好的選擇取決于特定的要求和目標。

MySQL

MySQL是一種開放源代碼且流行的數據庫管理系統,用于管理 關系數據庫 。Oracle提供了訪問和管理該數據庫的支持。與其他數據庫相比,它是快速,可伸縮且易于使用的數據庫管理系統。它通常與PHP腳本一起使用,以創建功能強大且動態的服務器端或基于Web的企業應用程序。

PostgreSQL

PostgreSQL 是一個先進的,開放源代碼的[對象]-關系型數據庫管理系統,它的主要目標是實現標準和可擴展性. PostgreSQL, 或者說是 Postgres, 試圖把對 ANSI/ISO SQL標準的采用與修正結合起來。

對比其他的RDBMS, PostgreSQL以它對于對象-關系和或關系型數據庫功能,比如對于可靠事務,例如原子性,一致性,隔離性和持久性(ACID)的完全支持,這些東西的高度需求和集合的支持,以示其獨特性。

PostgreSQL是高度可編程的, 因而可以使用被稱作“存儲過程”的自定義程序進行擴展. 這些功能可以被創建用來簡化一個重復、復雜并且常常需要數據庫操作的任務的執行。

PostgreSQL比MySQL的優勢

1、PostgreSQL是一個非常安全,獨立且功能豐富的開源數據庫。

2、PostgreSQL支持許多高級數據類型,例如多維數組,用戶定義的類型等。

3、PostgreSQL很好地遵循了SQL標準,并支持“高級” SQL內容,例如窗口函數或公共表表達式。

4、它提供了Oracle和SQL Server支持的所有性能優化。

MySQL比PostgreSQL的優勢

1、就數據庫排名而言,MySQL比PostgreSQL更受歡迎。

2、在MySQL中,獲得社區支持和搜索答案比PostgreSQL更容易。

3、復制是在MySQL而非PostgreSQL中很好地實現的。

如有不同觀點,歡迎發表評論。如果喜歡我的回答,歡迎“點贊、分享”。

評論0 贊同0
  •  加載中...
mengbo

mengbo

回答于2022-06-28 13:57

postgreSQL 和 MySql 都是支持 SQL標準(比如sql92, sql99),最主要的一點是: mysql 自從被oracle收購之后,社區擔心它的命運像java一樣,于是大量開源項目紛紛轉向 postgresql。


postgresql 的管理工具:pgadmin 非常便捷,可以細粒度的操作數據庫。

評論0 贊同0
  •  加載中...
Shimmer

Shimmer

回答于2022-06-28 13:57

優勢就是免費,沒有收費隱患。

評論0 贊同0
  •  加載中...
Karrdy

Karrdy

回答于2022-06-28 13:57

PostGis,MySQL雖然5.7支持geo(抄),但相比PostGis完善的地理坐標系,MySQL的geo更像是殘次品

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<