數據庫:PostgreSQL 和 MySQL對比

比較版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官方社區版版權情況:PostgreSQL 11(免費開源)、MySQL5.7 Oracle官方社區版(免費開源)

1. CPU限制

PGSQL沒有CPU核心數限制,有多少CPU核就用多少

MySQL能用128核CPU,超過128核用不上

2. 配置文件參數

PGSQL一共有255個參數,用到的大概是80個,參數比較穩定,用上個大版本配置文件也可以啟動當前大版本數據庫

MySQL一共有707個參數,用到的大概是180個,參數不斷增加,就算小版本也會增加參數,大版本之間會有部分參數不兼容情況

3. 第三方工具依賴情況

PGSQL只有高可用集群需要依靠第三方中間件,例如:patroni+etcd、repmgr

MySQL大部分操作都要依靠percona公司的第三方工具(percona-toolkit,XtraBackup),工具命令太多,學習成本高,高可用集群也需要第三方中間件,官方MGR集群還沒成熟

4. 高可用主從復制底層原理

PGSQL物理流復制,屬于物理復制,跟SQL Server鏡像/AlwaysOn一樣,嚴格一致,沒有任何可能導致不一致,性能和可靠性上,物理復制完勝邏輯復制,維護簡單

MySQL主從復制,屬于邏輯復制,(sql_log_bin、binlog_format等參數設置不正確都會導致主從不一致)大事務并行復制效率低,對于重要業務,需要依賴 percona-toolkit的pt-table-checksum和pt-table-sync工具定期比較和修復主從一致主從復制出錯嚴重時候需要重搭主從MySQL的邏輯復制并不阻止兩個不一致的數據庫建立復制關系

5. 從庫只讀狀態

PGSQL系統自動設置從庫默認只讀,不需要人工介入,維護簡單

MySQL從庫需要手動設置參數super_read_only=on,讓從庫設置為只讀,super_read_only參數有bug,鏈接:https://baijiahao.baidu.com/s?id=1636644783594388753&wfr=spider&for=pc

6. 版本分支

PGSQL只有社區版,沒有其他任何分支版本,PGSQL官方統一開發,統一維護,社區版有所有功能,不像SQL Server和MySQL有標準版、企業版、經典版、社區版、開發版、web版之分國內外還有一些基于PGSQL做二次開發的數據庫廠商,例如:Enterprise DB、瀚高數據庫等等,當然這些只是二次開發并不算獨立分支

MySQL由于歷史原因,分裂為三個分支版本,MariaDB分支、Percona分支 、Oracle官方分支,發展到目前為止各個分支基本互相不兼容Oracle官方分支還有版本之分,分為標準版、企業版、經典版、社區版

7. SQL特性支持

PGSQLSQL特性支持情況支持94種,SQL語法支持最完善,例如:支持公用表表達式(WITH查詢)

MySQLSQL特性支持情況支持36種,SQL語法支持比較弱,例如:不支持公用表表達式(WITH查詢)關于SQL特性支持情況的對比,可以參考:http://www.sql-workbench.net/dbms_comparison.html

8. 主從復制安全性

PGSQL同步流復制、強同步(remote apply)、高安全,不會丟數據PGSQL同步流復制:所有從庫宕機,主庫會罷工,主庫無法自動切換為異步流復制(異步模式),需要通過增加從庫數量來解決,一般生產環境至少有兩個從庫手動解決:在PG主庫修改參數synchronous_standby_names ='',并執行命令:pgctl reload ,把主庫切換為異步模式主從數據完全一致是高可用切換的第一前提,所以PGSQL選擇主庫罷工也是可以理解MySQL增強半同步復制 ,mysql5.7版本增強半同步才能保證主從復制時候不丟數據mysql5.7半同步復制相關參數:參數rpl_semi_sync_master_wait_for_slave_count 等待至少多少個從庫接收到binlog,主庫才提交事務,一般設置為1,性能最高參數rpl_semi_sync_master_timeout 等待多少毫秒,從庫無回應自動切換為異步模式,一般設置為無限大,不讓主庫自動切換為異步模式所有從庫宕機,主庫會罷工,因為無法收到任何從庫的應答包手動解決:在MySQL主庫修改參數rpl_semi_sync_master_wait_for_slave_count=0

9. 多字段統計信息

PGSQL支持多字段統計信息

MySQL不支持多字段統計信息

10. 索引類型

PGSQL多種索引類型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表達式索引)

MySQLbtree 索引,全文索引(低效),表達式索引(需要建虛擬列),hash 索引只在內存表

11. 物理表連接算法

PGSQL支持 nested-loop join 、hash join 、merge join

MySQL只支持 nested-loop join

12. 子查詢和視圖性能

PGSQL子查詢,視圖優化,性能比較高

MySQL視圖謂詞條件下推限制多,子查詢上拉限制多

13. 執行計劃即時編譯

PGSQL支持 JIT 執行計劃即時編譯,使用LLVM編譯器

MySQL不支持執行計劃即時編譯

14. 并行查詢

PGSQL并行查詢(多種并行查詢優化方法),并行查詢一般多見于商業數據庫,是重量級功能

MySQL有限,只支持主鍵并行查詢

15. 物化視圖

PGSQL支持物化視圖

MySQL不支持物化視圖

16. 插件功能

PGSQL支持插件功能,可以豐富PGSQL的功能,GIS地理插件,時序數據庫插件, 向量化執行插件等等

MySQL不支持插件功能

17. check約束

PGSQL支持check約束

MySQL不支持check約束,可以寫check約束,但存儲引擎會忽略它的作用,因此check約束并不起作用(mariadb 支持)

18. gpu 加速SQL

PGSQL可以使用gpu 加速SQL的執行速度

MySQL不支持gpu 加速SQL 的執行速度

19. 數據類型

PGSQL數據類型豐富,如 ltree,hstore,數組類型,ip類型,text類型,有了text類型不再需要varchar,text類型字段最大存儲1GB

MySQL數據類型不夠豐富

20. 跨庫查詢

PGSQL不支持跨庫查詢,這個跟Oracle 12C以前一樣

MySQL可以跨庫查詢

21. 備份還原

PGSQL備份還原非常簡單,時點還原操作比SQL Server還要簡單,完整備份+wal歸檔備份(增量)假如有一個三節點的PGSQL主從集群,可以隨便在其中一個節點做完整備份和wal歸檔備份

MySQL備份還原相對不太簡單,完整備份+binlog備份(增量)完整備份需要percona的XtraBackup工具做物理備份,MySQL本身不支持物理備份時點還原操作步驟繁瑣復雜

22. 性能視圖

PGSQL需要安裝pg_stat_statements插件,pg_stat_statements插件提供了豐富的性能視圖:如:等待事件,系統統計信息等不好的地方是,安裝插件需要重啟數據庫,并且需要收集性能信息的數據庫需要執行一個命令:create extension pg_stat_statements命令否則不會收集任何性能信息,比較麻煩

MySQL自帶PS庫,默認很多功能沒有打開,而且打開PS庫的性能視圖功能對性能有影響(如:內存占用導致OOM bug)

23. 安裝方式

PGSQL有各個平臺的包rpm包,deb包等等,相比MySQL缺少了二進制包,一般用源碼編譯安裝,安裝時間會長一些,執行命令多一些

MySQL有各個平臺的包rpm包,deb包等等,源碼編譯安裝、二進制包安裝,一般用二進制包安裝,方便快捷

24. DDL操作

PGSQL加字段、可變長字段類型長度改大不會鎖表,所有的DDL操作都不需要借助第三方工具,并且跟商業數據庫一樣,DDL操作可以回滾,保證事務一致性

MySQL由于大部分DDL操作都會鎖表,例如加字段、可變長字段類型長度改大,所以需要借助percona-toolkit里面的pt-online-schema-change工具去完成操作將影響減少到最低,特別是對大表進行DDL操作DDL操作不能回滾

25. 大版本發布速度

PGSQLPGSQL每年一個大版本發布,大版本發布的第二年就可以上生產環境,版本迭代速度很快PGSQL 9.6正式版推出時間:2016年PGSQL 10 正式版推出時間:2017年PGSQL 11 正式版推出時間:2018年PGSQL 12 正式版推出時間:2019年

MySQLMySQL的大版本發布一般是2年~3年,一般大版本發布后的第二年才可以上生產環境,避免有坑,版本發布速度比較慢MySQL5.5正式版推出時間:2010年MySQL5.6正式版推出時間:2013年MySQL5.7正式版推出時間:2015年MySQL8.0正式版推出時間:2018年

26. returning語法

PGSQL支持returning語法,returning clause 支持 DML 返回 Resultset,減少一次 Client <-> DB Server 交互

MySQL不支持returning語法

27. 內部架構

PGSQL多進程架構,并發連接數不能太多,跟Oracle一樣,既然跟Oracle一樣,那么很多優化方法也是相通的,例如:開啟大頁內存

MySQL多線程架構,雖然多線程架構,但是官方有限制連接數,原因是系統的并發度是有限的,線程數太多,反而系統的處理能力下降,隨著連接數上升,反而性能下降一般同時只能處理200 ~300個數據庫連接

28. 聚集索引

PGSQL不支持聚集索引,PGSQL本身的MVCC的實現機制所導致

MySQL支持聚集索引

29. 空閑事務終結功能

PGSQL通過設置 idle_in_transaction_session_timeout 參數來終止空閑事務,比如:應用代碼中忘記關閉已開啟的事務,PGSQL會自動查殺這種類型的會話事務

MySQL不支持終止空閑事務功能

30. 應付超大數據量

PGSQL不能應付超大數據量,由于PGSQL本身的MVCC設計問題,需要垃圾回收,只能期待后面的大版本做優化

MySQL不能應付超大數據量,MySQL自身架構的問題

31. 分布式演進

PGSQLHTAP數據庫:cockroachDB、騰訊Tbase分片集群:Postgres-XC、Postgres-XLMySQLHTAP數據庫:TiDB分片集群:各種各樣的中間件,不一一列舉

32. 數據庫的文件名和命名規律

PGSQLPGSQL在這方面做的比較不好,DBA不能在操作系統層面(停庫狀態下)看清楚數據庫的文件名和命名規律,文件的數量,文件的大小一旦操作系統發生文件丟失或硬盤損壞,非常不利于恢復,因為連名字都不知道PGSQL表數據物理文件的命名/存放規律是:在一個表空間下面,如果沒有建表空間默認在默認表空間也就是base文件夾下,例如:/data/base/16454/3599base:默認表空間pg_default所在的物理文件夾16454:表所在數據庫的oid3599:就是表對象的oid,當然,一個表的大小超出1GB之后會再生成多個物理文件,還有表的fsm文件和vm文件,所以一個大表實際會有多個物理文件由于PGSQL的數據文件布局內容太多,大家可以查閱相關資料當然這也不能全怪PGSQL,作為一個DBA,時刻做好數據庫備份和容災才是正道,做介質恢復一般是萬不得已的情況下才會做

MySQL數據庫名就是文件夾名,數據庫文件夾下就是表數據文件,每個表都有對應的frm文件和ibd文件,存儲元數據和表/索引數據,清晰明了,做介質恢復或者表空間傳輸都很方便

33. 權限設計

PGSQLPGSQL在權限設計這塊是比較坑爹,拋開實例權限和表空間權限,PGSQL的權限層次有點像SQL Server,db=》schema=》object要說權限,這里要說一下Oracle,用Oracle來類比在ORACLE 12C之前,實例與數據庫是一對一,也就是說一個實例只能有一個數據庫,不像MySQL和SQL Server一個實例可以有多個數據庫,并且可以隨意跨庫查詢而PGSQL不能跨庫查詢的原因也是這樣,PGSQL允許建多個數據庫,跟ORACLE類比就是有多個實例(之前說的實例與數據庫是一對一)一個數據庫相當于一個實例,因為PGSQL允許有多個實例,所以PGSQL單實例不叫一個實例,叫集簇(cluster),集簇這個概念可以查閱PGSQL的相關資料PGSQL里面一個實例/數據庫下面的schema相當于數據庫,所以這個schema的概念對應MySQL的database注意點:正因為是一個數據庫相當于一個實例,PGSQL允許有多個實例/數據庫,所以數據庫之間是互相邏輯隔離的,導致的問題是,不能一次對一個PGSQL集簇下面的所有數據庫做操作必須要逐個逐個數據庫去操作,例如上面說到的安裝pg_stat_statements插件,如果您需要在PGSQL集簇下面的所有數據庫都做性能收集的話,需要逐個數據庫去執行加載命令又例如跨庫查詢需要dblink插件或fdw插件,兩個數據庫之間做查詢相當于兩個實例之間做查詢,已經跨越了實例了,所以需要dblink插件或fdw插件,所以道理非常簡單權限操作也是一樣逐個數據庫去操作,還有一個就是PGSQL雖然像SQL Server的權限層次結構db=》schema=》object,但是實際會比SQL Server要復雜一些,還有就是新建的表還要另外授權在PGSQL里面,角色和用戶是一樣的,對新手用戶來說有時候會傻傻分不清,也不知道怎么去用角色,所以PGSQL在權限設計這一塊確實比較坑爹

MySQL使用mysql庫下面的5個權限表去做權限映射,簡單清晰,唯一問題是缺少權限角色user表db表host表tables_priv表columns_priv表

34. 發展歷史

PGSQL在1995年,開發人員Andrew Yu和Jolly Chen在Postgres中添加了一個SQL(Structured Query Language,結構化查詢語言)翻譯程序,該版本叫做Postgres95,在開放源代碼社區發放。在1996年,再次對Postgres95做了較大的改動,并將其命名為PostgresSQL 6.0版發布,PostgresSQL 的名字就此定型,從1995年算起,大概有24年歷史

MySQL在1996年,MySQL 1.0發布,它只面向一小撥人,相當于內部發布。到了1996年10月,MySQL 3.11.1發布(MySQL沒有2.x版本),最開始只提供Solaris操作系統下的二進制版本,一個月后,Linux版本出現從1996年算起,大概有23年歷史

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271802.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#獲取當前系統磁盤符、系統目錄、桌面等

1.獲取方式如下 Environment.SpecialFolder中定義了許多常用的目錄 //獲取當前系統磁盤符方法1&#xff0c;返回&#xff1a;C: string path Environment.GetEnvironmentVariable("systemdrive"); //獲取當前系統磁盤符方法2,返回&#xff1a;C: string path Envir…

MAC電腦常用效率工具推薦

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

Java String類型轉換成Date日期類型

//格式化數據 SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format sdf.format(new Date()); System.out.println(format);//String格式的數據轉化成Date格式 String timeStr "2019-07-09 03:34:56 "; Date parse sdf.pa…

docker php 安裝swoole,swoole(1)使用docker安裝swoole環境

1.下載鏡像pull php 鏡像docker pull php:7.3-alpine3.8創建容器docker run -it --name test php:7.3-alpine3.8 sh2.進入容器安裝swoole# 安裝依賴的第三方包echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \echo http://mirrors.u…

插件書寫示例

正常模態框代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

MAC電腦8款常用設計工具推薦

目錄 1、Sketch 3 2、Affinity Designer 3、Framer 4、PaintCode 5、Hype 3 Professional 6、Pixave 2 7、Iconjar 8、Sip for Mac and iPhone 1、Sketch 3 Sketch是完全滿足我上面4條選擇條件的一款UI設計工具&#xff0c;前文第50頁已經提到過相關內容。 2、Affinity Designe…

matlab the installer cannot read,MATLAB安裝 The installer cannot read the mwinstall.dll… | 學步園...

前提&#xff1a;安裝前的文件 的 目錄 不需含有 中文安裝MATLAB7時彈出以下警告對話框&#xff0c;顯示“ The installer cannot read the mwinstall.dll file, This is probably due to a CD reader which can only read files with an eight.three naming convention. Pleas…

專家觀點:即使在云中 硬件同樣至關重要

英特爾最近發布了新一代企業級CPU。第四代E5和E7CPU確實有些與眾不同之處&#xff1a;更多的緩存、更多的內核、更快更多的RAM。但是大家沒有發現這款產品還有一個特別的地方。 也許一切都與云有關&#xff0c;我們已經告別以前的硬件。你可能認為IT命令結構級別越高&#xff0…

matlab怎么安裝compiler,關于MATLAB中compiler配置問題

按照大家的方法進行了系統配置&#xff0c;下載安裝了SDK7.1&#xff0c;可運行mex setup之后還是一直彈出No supported SDK or compiler was found on this computer.Welcome to mex -setup. This utility will help you set upa default compiler. For a list of supported…

計算機硬件:內存條的基礎知識筆記

在電腦硬件中&#xff0c;CPU、顯卡、內存均三者是重中之重&#xff0c;所以我們在選擇這些核心硬件一定要慎重。今天給大家分享一下關于的電腦內存基礎知識&#xff0c;讓更多的裝機朋友們可以更好的學習內存相關知識。 史上最易懂的電腦內存基礎知識 內存條的基本概念&#x…

數獨Sudoku

數獨&#xff08;すうどく&#xff0c;Sūdoku&#xff09;&#xff0c;是源自18世紀瑞士發明&#xff0c;流傳到美國&#xff0c;再由日本發揚光大的一種數學游戲。是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據99盤面上的已知數字&#xff0c;推理出所有剩余空格的數字&…

電腦CPU選購的幾個指標

CPU的概念介紹 CPU是Central Processing Unit(中央處理器)的縮寫&#xff0c;CPU的詳細參數包括內核結構&#xff0c; 主頻&#xff0c;外頻&#xff0c;倍頻&#xff0c;接口&#xff0c;緩存&#xff0c;多媒體指令集&#xff0c;制造工藝&#xff0c;電壓&#xff0c;封裝形…

idea生成方法注釋的正確方法

生成方法注釋 1.打開File -> Settings 2.Editor -> Live Templates -> 點擊右邊加號為自己添加一個Templates Group -> 然后選中自己的Group再次點擊加號添加Live Templates 重點&#xff1a;Abbreviation那里不要用/開頭的&#xff01;&#xff01;&#xff01; …

php linux 緩存文件,Linux下搭建網站提示緩存文件寫入失敗怎么辦?

Linux下搭建網站提示緩存文件寫入失敗時該怎么處理&#xff1f;基于ThinkPHP框架及Linux環境搭建的網站&#xff0c;經常會遭遇緩存文件寫入失敗的錯誤提示&#xff0c;即便是現在流行的P2P網站程序便是如此&#xff0c;具體解決方法請看下文。Linux下搭建網站提示緩存文件寫入…

什么是CharSequence

CharSequence是一個接口&#xff0c;比較常見的String、StringBuilder、StringBuffer都實現了這個接口。 當我們看到一個API里面有CharSequence的時候&#xff0c;它也是可以被其子類代替的&#xff0c;一般用String代替即可。

你真的了解顯卡嗎?顯卡基礎知識大掃盲

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

Servlet的運行方式

通常我們運行servlet需要在web.xml配置文件中&#xff0c;注冊我們寫好的servlet以及其對應的訪問路徑。 在學習web開發中&#xff0c;有一種不需要配置便可以直接對servlet進行配置的方式&#xff0c;在web.xml文件中添加如下代碼&#xff1a; <servlet><servlet-nam…

matlab中select,[轉載]MATLAB閾值獲取函數ddencmp、thselect、wbmpen和w

crit(t)wdcbm的調用格式有以下兩種&#xff1a;(1)[THR,NKEEP]wdcbm(C,L,ALPHA);(2)[THR,NKEEP]wdcbm(C,L,ALPHA,M);函數wdcbm是使用Birge-Massart算法獲取一維小波變換的閾值。返回值THR是與尺度無關的閾值&#xff0c;NKEEP是系數的個數。[C,L]是要進行壓縮或消噪的信號在jle…

使用Redis讓單號從001遞增

最近項目遇到一個需求&#xff0c;單號從001開始遞增 下面用到了redis處理 代碼如下&#xff1a; public String getId() {String key "providerManager";Long incr getIncr(key);if (incr 0) {incr getIncr(key);//從001開始}DecimalFormat df new DecimalF…

硬件知識:直接拔掉USB移動硬盤會對硬盤造成影響嗎?

大家在網上經常可以看到直接拔掉移動硬盤會損壞硬盤的文章。如果說突然拔掉硬盤會造成丟失數據我還有一點相信&#xff0c;但是說會造成損壞硬盤感覺就會有些疑問了。難道USB設備在開始設計時&#xff0c;沒有考慮到熱插拔這個動作&#xff1f; 移動硬盤在通電工作時&#xff0…