特性 | MySQL | PostgreSQL |
實例 | 通過執(zhí)行 MySQL 命令(mysqld)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫。一臺服務器可以運行多個 mysqld 實例。一個實例管理器可以監(jiān)視 mysqld 的各個實例。 | 通過執(zhí)行 Postmaster 進程(pg_ctl)啟動實例。一個實例可以管理一個或多個數(shù)據(jù)庫,這些數(shù)據(jù)庫組成一個集群。集群是磁盤上的一個區(qū)域,這個區(qū)域在安裝時初始化并由一個目錄組成,所有數(shù)據(jù)都存儲在這個目錄中。使用 initdb 創(chuàng)建第一個數(shù)據(jù)庫。一臺機器上可以啟動多個實例。 |
數(shù)據(jù)庫 | 數(shù)據(jù)庫是命名的對象集合,是與實例中的其他數(shù)據(jù)庫分離的實體。一個 MySQL 實例中的所有數(shù)據(jù)庫共享同一個系統(tǒng)編目。 | 數(shù)據(jù)庫是命名的對象集合,每個數(shù)據(jù)庫是與其他數(shù)據(jù)庫分離的實體。每個數(shù)據(jù)庫有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫共享 pg_databases。 |
數(shù)據(jù)緩沖區(qū) | 通過 innodb_buffer_pool_size 配置參數(shù)設置數(shù)據(jù)緩沖區(qū)。這個參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個緩沖區(qū)來緩存表的數(shù)據(jù)和索引。在專用的數(shù)據(jù)庫服務器上,這個參數(shù)最高可以設置為機器物理內(nèi)存量的 80%。 | Shared_buffers 緩存。在默認情況下分配 64 個緩沖區(qū)。默認的塊大小是 8K??梢酝ㄟ^設置 postgresql.conf 文件中的 shared_buffers 參數(shù)來更新緩沖區(qū)緩存。 |
數(shù)據(jù)庫連接 | 客戶機使用 CONNECT 或 USE 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 | 客戶機使用 connect 語句連接數(shù)據(jù)庫,這時要指定數(shù)據(jù)庫名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫中的用戶和用戶組。 |
身份驗證 | MySQL 在數(shù)據(jù)庫級管理身份驗證。 基本只支持密碼認證。 | PostgreSQL 支持豐富的認證方法:信任認證、口令認證、Kerberos 認證、基于 Ident 的認證、LDAP 認證、PAM 認證 |
加密 | 可以在表級指定密碼來對數(shù)據(jù)進行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對列數(shù)據(jù)進行加密和解密??梢酝ㄟ^ SSL 連接實現(xiàn)網(wǎng)絡加密。 | 可以使用 pgcrypto 庫中的函數(shù)對列進行加密/解密。可以通過 SSL 連接實現(xiàn)網(wǎng)絡加密。 |
審計 | 可以對 querylog 執(zhí)行 grep。 | 可以在表上使用 PL/pgSQL 觸發(fā)器來進行審計。 |
查詢解釋 | 使用 EXPLAIN 命令查看查詢的解釋計劃。 | 使用 EXPLAIN 命令查看查詢的解釋計劃。 |
備份、恢復和日志 | InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務恢復。需要第三方軟件才能支持熱備份。 | 在數(shù)據(jù)目錄的一個子目錄中維護寫前日志。支持在線和離線完全備份以及崩潰、時間點和事務恢復。 可以支持熱備份。 |
JDBC 驅(qū)動程序 | 可以從 參考資料 下載 JDBC 驅(qū)動程序。 | 可以從 參考資料 下載 JDBC 驅(qū)動程序。 |
表類型 | 取決于存儲引擎。例如,NDB 存儲引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 | 支持臨時表、常規(guī)表以及范圍和列表類型的分區(qū)表。不支持哈希分區(qū)表。 由于PostgreSQL的表分區(qū)是通過表繼承和規(guī)則系統(tǒng)完成了,所以可以實現(xiàn)更復雜的分區(qū)方式。 |
索引類型 | 取決于存儲引擎。MyISAM:BTREE,InnoDB:BTREE。 | 支持 B-樹、哈希、R-樹和 Gist 索引。 |
約束 | 支持主鍵、外鍵、惟一和非空約束。對檢查約束進行解析,但是不強制實施。 | 支持主鍵、外鍵、惟一、非空和檢查約束。 |
存儲過程和用戶定義函數(shù) | 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語句。存儲過程可以用 SQL 和 C 編寫。用戶定義函數(shù)可以用 SQL、C 和 C 編寫。 | 沒有單獨的存儲過程,都是通過函數(shù)實現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過程語言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。 |
觸發(fā)器 | 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器語句用過程語言復合語句編寫。 | 支持行前觸發(fā)器、行后觸發(fā)器和語句觸發(fā)器,觸發(fā)器過程用 C 編寫。 |
系統(tǒng)配置文件 | my.conf | Postgresql.conf |
數(shù)據(jù)庫配置 | my.conf | Postgresql.conf |
客戶機連接文件 | my.conf | pg_hba.conf |
XML 支持 | 有限的 XML 支持。 | 有限的 XML 支持。 |
數(shù)據(jù)訪問和管理服務器 | OPTIMIZE TABLE —— 回收未使用的空間并消除數(shù)據(jù)文件的碎片 myisamchk -analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù)(MyISAM 存儲引擎) mysql —— 命令行工具 MySQL Administrator —— 客戶機 GUI 工具 | Vacuum —— 回收未使用的空間 Analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計數(shù)據(jù) psql —— 命令行工具 pgAdmin —— 客戶機 GUI 工具 |
并發(fā)控制 | 支持表級和行級鎖。InnoDB 存儲引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語句在事務級設置隔離級別。 | 支持表級和行級鎖。支持的 ANSI 隔離級別是 Read Committed(默認 —— 能看到查詢啟動時數(shù)據(jù)庫的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務啟動之前提交的結(jié)果)。使用 SET TRANSACTION 語句在事務級設置隔離級別。使用 SET SESSION 在會話級進行設置。 |
MySQL | PostgreSQL |
最重要的引擎InnoDB很早就由Oracle公司控制。目前整個MySQL數(shù)據(jù)庫都由Oracle控制。 | BSD協(xié)議,沒有被大公司壟斷。 |
對復雜查詢的處理較弱,查詢優(yōu)化器不夠成熟 | 很強大的查詢優(yōu)化器,支持很復雜的查詢處理。 |
只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。 | 都支持 |
性能優(yōu)化工具與度量信息不足 | 提供了一些性能視圖,可以方便的看到發(fā)生在一個表和索引上的select、delete、update、insert統(tǒng)計信息,也可以看到cache命中率。網(wǎng)上有一個開源的pgstatspack工具。 |
InnoDB的表和索引都是按相同的方式存儲。也就是說表都是索引組織表。這一般要求主鍵不能太長而且插入時的主鍵最好是按順序遞增,否則對性能有很大影響。 | 不存在這個問題。 |
大部分查詢只能使用表上的單一索引;在某些情況下,會存在使用多個索引的查詢,但是查詢優(yōu)化器通常會低估其成本,它們常常比表掃描還要慢。 | 不存在這個問題 |
表增加列,基本上是重建表和索引,會花很長時間。 | 表增加列,只是在數(shù)據(jù)字典中增加表定義,不會重建表 |
存儲過程與觸發(fā)器的功能有限??捎脕砭帉懘鎯^程、觸發(fā)器、計劃事件以及存儲函數(shù)的語言功能較弱 | 除支持pl/pgsql寫存儲過程,還支持perl、python、Tcl類型的存儲過程:pl/perl,pl/python,pl/tcl。 也支持用C語言寫存儲過程。 |
不支持Sequence。 | 支持 |
不支持函數(shù)索引,只能在創(chuàng)建基于具體列的索引。 不支持物化視圖。 | 支持函數(shù)索引,同時還支持部分數(shù)據(jù)索引,通過規(guī)則系統(tǒng)可以實現(xiàn)物化視圖的功能。 |
執(zhí)行計劃并不是全局共享的, 僅僅在連接內(nèi)部是共享的。 | 執(zhí)行計劃共享 |
MySQL支持的SQL語法(ANSI SQL標準)的很小一部分。不支持遞歸查詢、通用表表達式(Oracle的with 語句)或者窗口函數(shù)(分析函數(shù))。 | 都 支持 |
不支持用戶自定義類型或域(domain) | 支持。 |
對于時間、日期、間隔等時間類型沒有秒以下級別的存儲類型 | 可以精確到秒以下。 |
身份驗證功能是完全內(nèi)置的,不支持操作系統(tǒng)認證、PAM認證,不支持LDAP以及其它類似的外部身份驗證功能。 | 支持OS認證、Kerberos 認證 、Ident 的認證、LDAP 認證、PAM 認證 |
不支持database link。有一種叫做Federated的存儲引擎可以作為一個中轉(zhuǎn)將查詢語句傳遞到遠程服務器的一個表上,不過,它功能很粗糙并且漏洞很多 | 有dblink,同時還有一個dbi-link的東西,可以連接到oracle和mysql上。 |
Mysql Cluster可能與你的想象有較大差異。開源的cluster軟件較少。 復制(Replication)功能是異步的,并且有很大的局限性.例如,它是單線程的(single-threaded),因此一個處理能力更強的Slave的恢復速度也很難跟上處理能力相對較慢的Master. | 有豐富的開源cluster軟件支持。 |
explain看執(zhí)行計劃的結(jié)果簡單。 | explain返回豐富的信息。 |
類似于ALTER TABLE或CREATE TABLE一類的操作都是非事務性的.它們會提交未提交的事務,并且不能回滾也不能做災難恢復 | DDL也是有事務的。 |
聯(lián)系客服