標籤:nbsp 許可證 outer 支付 並且 個數 資料完整性 方法 執行
近十年來很多開發人員和專業人士對MySQL和PostgreSQL進行了比較,大部分人認為後者效能更優。PostgreSQL的支援者認為它的標準支援和ACID[1]性都超過了MySQL。MySQL還流行的原因在於還有很多Linux的Web程式安裝包裡帶著它,但是自從擁有MySQL著作權和商標的Sun被Oracle收購後,人們都在擔心MySQL不會像以前那樣開放了。同時PostgreSQL不僅快,而且支援JSON,使他成為少數的支援NoSQL的關係型資料庫。(小道訊息:MySQL的作者Monty Widenius,在MySQL分支建立了和MySQL完全相容而且不被Oracle擁有的MariaDB。)
MySQL/MariaDB的目前的版本是5.7.6,而PostgreSQL版本是9.4.1。
ANSI標準:
MySQL比其早期版本在標準方面更加支援(MySQL說:如果使用者喜歡,他們可以支援非標準),但是PostgreSQL從一開始就支援,而MySQL之後才加入。
平局
ACID特性
PostpreSQL有一個儲存引擎,MySQL有9個。然而只有兩個被廣泛使用:MyISAM,InnoDB。MyISAM是最開始的引擎,速度很快但是不支援事務;InnoDB支援事務,而且速度更快,是預設引擎。MySQL的InnoDB引擎和PostgreSQL都完全擁有ACID特性,沒有什麼區別。
平局
表鎖
MyISAM使用表鎖來獲得更快的速度。當大量讀操作時效能表現良好,但是寫操作會把整個表鎖死,等待寫入完成。InnoDB引擎和PostgreSQL使用的是行級鎖,又打平。
平局
子查詢不確定性
子查詢一直以來是MySQL“臭名昭彰”的問題:兩層或兩層以上子查詢效率極低,雖然5.6.5已經有了很大改進,但是PostpreSQL在聯集查詢表現更加突出,特別是MySQL不支援Full Outer Joins。
PostgreSQL勝
支援JSON和NoSQL
PostgreSQL新增功能,支援使用NoSQL和儲存JSON。資料儲存比傳統關係型資料庫更加靈活。
PostgreSQL勝
PostgreSQL其他優勢:
更好的許可
PostgrePost擁有MIT-style認證,允許你做任何事情,包括開/閉源的商業用途。而MySQL用戶端庫為GPL認證,意味著你必須像Oracle支付商業費用,或者提供者源碼。(網站使用MYSQL時候會是個小麻煩;MariaDB使用GPL2認證,並且為MySQL用戶端提供限制更少的LGPL認證)
更好的資料完整性
PostgreSQL預設對插入和更新的資料嚴格檢查,而MySQL只有開啟了(STRICT_ALL_TABLES/STRICT_TRANS_TAQBLES)才會進行嚴格檢查。
資料庫擴充開發
兩個資料庫都允許擴充開發。MySQL提供有C系列語言的API介面。你甚至可以在MySQL5.7.3之後在InnoDB表中做全文檢索索引。PostgreSQL也有同樣的功能,但是支援更多的語言,包括C/C++,Java,.Net,Perl,Python,Ruby,Tcl,ODBC等,甚至可以在單獨進程(後台)中運行使用者提供的代碼。
PostgreSQL在系統目錄中提供了關係型資料庫的資料庫、表、行/列的資料類型、方法、存取方法等資訊。使用者可以修改系統目錄表來擴充資料庫。
結論
雖然我已經用了十多年兩種資料庫,而且MySQL已經有很大的提升,但是不得不承認對PostgreSQL的偏愛。PostgreSQL更好用的許可證,自訂資料類型,表繼承,規律的系統和資料庫事件。
[1] ACID:指資料庫事務正確執行的四個基本要素:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
SQL:Structured Query Language(結構化查詢語句)
[翻譯]PostgreSQL比MySQL/MariaDB的優勢