區別:1、MySQL通過執行命令啟動範例,而PG通過執行程序來啟動;2、PG支援物化檢視、而MySQL不支援物化檢視;3、MySQL不支援拓展性,而PG是高度可延伸的;4、PG儲存過程的功能支援要比MySQL好,具備本地快取執行計劃的能力。
本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。
MySQL
MySQL相對來說比較年輕,首度出現在1994年。它聲稱自己是最流行的開源資料庫。MySQL就是LAMP(用於Web開發的軟體包,包括 Linux、Apache及Perl/PHP/Python)中的M。構建在LAMP棧之上的大多數應用都會使用MySQL,包括那些知名的應用,如 WordPress、Drupal、Zend及phpBB等。
一開始,MySQL的設計目標是成為一個快速的Web伺服器後端,使用快速的索引序列存取方法(ISAM),不支援ACID。經過早期快速的發展之 後,MySQL開始支援更多的儲存引擎,並通過InnoDB引擎實現了ACID。MySQL還支援其他儲存引擎,提供了臨時表的功能(使用MEMORY存 儲引擎),通過MyISAM引擎實現了高速讀的資料庫,此外還有其他的核心儲存引擎與第三方引擎。
MySQL的檔案非常豐富,有很多品質不錯的免費參考手冊、圖書與線上檔案,還有來自於Oracle和第三方廠商的培訓與支援。
MySQL近幾年經歷了所有權的變更和一些頗具戲劇性的事件。它最初是由MySQL AB開發的,然後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支援MySQL的多個版 本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一 些則是收費的。其核心程式碼基於GPL許可,對於那些不想使用GPL許可的開發者與廠商來說還有商業許可可供使用。
現在,基於最初的MySQL程式碼還有更多的資料庫可供選擇,因為幾個核心的MySQL開發者已經發布了MySQL分支。最初的MySQL建立者之一 Michael 「Monty」 Widenius貌似後悔將MySQL賣給了Sun公司,於是又開發了他自己的MySQL分支MariaDB,它是免費的,基於GPL許可。知名的 MySQL開發者Brian Aker所建立的分支Drizzle對其進行了大量的改寫,特別針對多CPU、雲、網路應用與高並行進行了優化。
PostgreSQL
PostgreSQL(簡稱PG)標榜自己是世界上最先進的開源資料庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那麼昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加利福尼亞大學伯克利分校開發的,作為Ingres資料庫的後繼。
PostgreSQL是完全由社群驅動的開源專案,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了 多個不同的社群版、商業版與企業版。PostgreSQL基於自由的BSD/MIT許可,組織可以使用、複製、修改和重新分發程式碼,只需要提供一個版權宣告即可。
可靠性是PostgreSQL的最高優先順序。它以堅如磐石的品質和良好的工程化而聞名,支援高事務、任務關鍵型應用。PostgreSQL的檔案非 常精良,提供了大量免費的線上手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社群支援是非常棒的,還有來自於獨立廠商的商業支援。
資料一致性與完整性也是PostgreSQL的高優先順序特性。PostgreSQL是完全支援ACID特性的,它對於資料庫存取提供了強大的安全性 保證,充分利用了企業安全工具,如Kerberos與OpenSSL等。你可以定義自己的檢查,根據自己的業務規則確保資料品質。
在眾多的管理特性 中,point-in-time recovery(PITR)是非常棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復建立熱備份以及快照與恢復的能力。但這並不是 PostgreSQL的全部,專案還提供了幾個方法來管理PostgreSQL以實現高可用、負載均衡與複製等,這樣你就可以使用適合自己特定需求的功能了。
postgresql和mysql的區別
特性 | MySQL | PostgreSQL |
範例 | 通過執行 MySQL 命令(mysqld)啟動範例。一個範例可以管理一個或多個資料庫。一臺伺服器可以執行多個 mysqld 範例。一個範例管理器可以監視 mysqld 的各個範例。 | 通過執行 Postmaster 程序(pg_ctl)啟動範例。一個範例可以管理一個或多個資料庫,這些資料庫組成一個叢集。叢集是磁碟上的一個區域,這個區域在安裝時初始化並由一個目錄組成,所有資料都儲存在這個目錄中。使用 initdb 建立第一個資料庫。一臺機器上可以啟動多個範例。 |
資料庫 | 資料庫是命名的物件集合,是與範例中的其他資料庫分離的實體。一個 MySQL 範例中的所有資料庫共用同一個系統編目。 | 資料庫是命名的物件集合,每個資料庫是與其他資料庫分離的實體。每個資料庫有自己的系統編目,但是所有資料庫共用 pg_databases。 |
資料緩衝區 | 通過 innodb_buffer_pool_size 設定引數設定資料緩衝區。這個引數是記憶體緩衝區的位元組數,InnoDB 使用這個緩衝區來快取表的資料和索引。在專用的資料庫伺服器上,這個引數最高可以設定為機器實體記憶體量的 80%。 | Shared_buffers 快取。在預設情況下分配 64 個緩衝區。預設的塊大小是 8K。可以通過設定 postgresql.conf 檔案中的 shared_buffers 引數來更新緩衝區快取。 |
資料庫連線 | 客戶機使用 CONNECT 或 USE 語句連線資料庫,這時要指定資料庫名,還可以指定使用者 id 和密碼。使用角色管理資料庫中的使用者和使用者組。 | 客戶機使用 connect 語句連線資料庫,這時要指定資料庫名,還可以指定使用者 id 和密碼。使用角色管理資料庫中的使用者和使用者組。 |
身份驗證 | MySQL 在資料庫級管理身份驗證。 基本只支援密碼認證。 | PostgreSQL 支援豐富的認證方法:信任認證、口令認證、Kerberos 認證、基於 Ident 的認證、LDAP 認證、PAM 認證 |
加密 | 可以在表級指定密碼來對資料進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數對列資料進行加密和解密。可以通過 SSL 連線實現網路加密。 | 可以使用 pgcrypto 庫中的函數對列進行加密/解密。可以通過 SSL 連線實現網路加密。 |
審計 | 可以對 querylog 執行 grep。 | 可以在表上使用 PL/pgSQL 觸發器來進行審計。 |
備份、恢復和紀錄檔 | InnoDB 使用寫前(write-ahead)紀錄檔記錄。支援線上和離線完全備份以及崩潰和事務恢復。需要第三方軟體才能支援熱備份。 | 在資料目錄的一個子目錄中維護寫前紀錄檔。支援線上和離線完全備份以及崩潰、時間點和事務恢復。 可以支援熱備份。 |
約束 | 支援主鍵、外來鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。 | 支援主鍵、外來鍵、惟一、非空和檢查約束。 |
儲存過程和使用者定義函數 | 支援 CREATE PROCEDURE 和 CREATE FUNCTION 語句。儲存過程可以用 SQL 和 C++ 編寫。使用者定義函數可以用 SQL、C 和 C++ 編寫。 | 沒有單獨的儲存過程,都是通過函數實現的。使用者定義函數可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。 |
觸發器 | 支援行前觸發器、行後觸發器和語句觸發器,觸發器語句用過程語言複合語句編寫。 | 支援行前觸發器、行後觸發器和語句觸發器,觸發器過程用 C 編寫。 |
系統組態檔 | my.conf | Postgresql.conf |
資料庫設定 | my.conf | Postgresql.conf |
客戶機連線檔案 | my.conf | pg_hba.conf |
XML 支援 | 有限的 XML 支援。 | 有限的 XML 支援。 |
資料存取和管理伺服器 | OPTIMIZE TABLE —— 回收未使用的空間並消除資料檔案的碎片 myisamchk -analyze —— 更新查詢優化器所使用的統計資料(MyISAM 儲存引擎) mysql —— 命令列工具 MySQL Administrator —— 客戶機 GUI 工具 | Vacuum —— 回收未使用的空間 Analyze —— 更新查詢優化器所使用的統計資料 psql —— 命令列工具 pgAdmin —— 客戶機 GUI 工具 |
並行控制 | 支援表級和行級鎖。InnoDB 儲存引擎支援 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務級設定隔離級別。 | 支援表級和行級鎖。支援的 ANSI 隔離級別是 Read Committed(預設 —— 能看到查詢啟動時資料庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務啟動之前提交的結果)。使用 SET TRANSACTION 語句在事務級設定隔離級別。使用 SET SESSION 在對談級進行設定。 |
VS | PostgreSQL | MySQL |
---|---|---|
開源 | PostgreSQL是一個免費的開源系統,它受PostgreSQL許可證(自由的開源許可證)的約束。 | MySQL屬於Oracle旗下產品,並提供幾種付費版本供使用者使用 |
管理 | PostgreSQL是全球使用者共同發展的產品 | MySQL是GNU通用公共許可以及各種專有協定條款下的產品 |
效能 | PostgreSQL適合對讀寫速度要求很高的大型系統中使用 | MySQL主要用於Web應用程式,該Web應用程式僅需要資料庫來進行資料交易。 |
遵循ACID | PostgreSQL從頭到尾都遵循ACID原則,並確保滿足需求 | MySQL只有在使用InnoDB和NDB叢集儲存引擎時才符合ACID要求。 |
SQL 相容性 | 「從檔案看,PostgreSQL是相容大部分SQL的。 PostgreSQL支援SQL:2011的大多數功能。在核心一致性所需的179個強制性功能中,PostgreSQL至少相容160個。此外,還有一系列受支援的可選功能。」 | 「從檔案看,MySQL在某些版本是相容部分SQL。 我們對該產品的主要目標之一是繼續努力達到SQL標準的要求,但又不犧牲速度或可靠性。我們可以新增SQL擴充套件或對非SQL功能的支援,如果這樣可以極大地提高MySQL伺服器在我們大部分使用者群中的可用性。」 |
支援平臺 | PostgreSQL可以執行在Linux, Windows (Win2000 SP4 及以上),FreeBSD,OpenBSD,NetBSD , Mac OS X, AIX, IRIX ,Solaris和 Tu64. 也支援由技術巨頭惠普開發的HP-UX OS,以及開源的Unix OS。 | MySQL可以執行在Oracle Solaris,Microsoft Windows, Linux Mac OS X。MySQL擴充套件了對開源FreeBSD OS的支援 |
程式語言支援 | PostgreSQL是用C語言編寫的,它支援多種程式語言,最突出的C/C++, Delphi, JavaScript, Java, Python, R , Tcl , Go, Lisp, Erlang和.Net. | PostgreSQL是用C和C++編寫的,它支援C/C++, Erlang,PHP,Lisp,和Go, Perl,Java, Delphi, R ,和 Node.js. |
物化檢視 | PostgreSQL支援物化檢視 | MySQL不支援物化檢視 |
資料備份 | PostgreSQL支援主備複製,並且還可以通過實現第三方擴充套件來處理其他型別的複製 | MySQL支援主備複製,其中每個節點都是主節點,並且有權更新資料 |
可拓展性 | PostgreSQL是高度可延伸的,您可以新增和擁有資料型別,運運算元,索引型別和功能語言。 | MySQL不支援拓展性。 |
存取方法 | PostgreSQL支援所有標準。 | MySQL支援所有標準。 |
社群支援 | PostgreSQL有一個活躍的社群支援,該社群幫助改善現有功能,其富有創造力的提交者竭盡全力確保該資料庫保持最新的功能和最大的安全性,成為最先進的資料庫。 | MySQL也有一個龐大的追隨者社群,這些社群貢獻者,特別是在被Oracle收購之後,主要關注一些偶爾出現的新功能,並維護現有功能。 |
安全性 | PostgreSQL為連線提供本機SSL支援,以加密使用者端/伺服器通訊。 PSQL還具有行級安全性。 | MySQL是高度安全的,並且包含多個安全功能。 |
PostgreSQL相對於MySQL的優勢
在SQL的標準實現上要比MySQL完善,而且功能實現比較嚴謹;
儲存過程的功能支援要比MySQL好,具備本地快取執行計劃的能力;
對錶連線支援較完整,優化器的功能較完整,支援的索引型別很多,複雜查詢能力較強;
PG主表採用堆表存放,MySQL採用索引組織表,能夠支援比MySQL更大的資料量。
PG的主備複製屬於物理複製,相對於MySQL基於binlog的邏輯複製,資料的一致性更加可靠,複製效能更高,對主機效能的影響也更小。
MySQL的儲存引擎外掛化機制,存在鎖機制複雜影響並行的問題,而PG不存在。
MySQL相對於PG的優勢:
innodb的基於回滾段實現的MVCC機制,相對PG新老資料一起存放的基於XID的MVCC機制,是佔優的。新老資料一起存放,需要定時觸 發VACUUM,會帶來多餘的IO和資料庫物件加鎖開銷,引起資料庫整體的並行能力下降。而且VACUUM清理不及時,還可能會引發資料膨脹;
MySQL採用索引組織表,這種儲存方式非常適合基於主鍵匹配的查詢、刪改操作,但是對錶結構設計存在約束;
MySQL的優化器較簡單,系統表、運運算元、資料型別的實現都很精簡,非常適合簡單的查詢操作;
MySQL分割區表的實現要優於PG的基於繼承表的分割區實現,主要體現在分割區個數達到上千上萬後的處理效能差異較大。
MySQL的儲存引擎外掛化機制,使得它的應用場景更加廣泛,比如除了innodb適合事務處理場景外,myisam適合靜態資料的查詢場景。
【相關推薦:】
以上就是postgresql和mysql有什麼區別的詳細內容,更多請關注TW511.COM其它相關文章!