[DB]PostgreSQL 與 MySQL 相比,優勢何在?
PostgreSQL 與 MySQL 相比,優勢何在? - 資料庫 - 知乎
https://www.zhihu.com/question/20010554
Pg 沒有 MySQL 的各種坑
MySQL 的各種 text 欄位有不同的限制, 要手動區分 small text, middle text, large text... Pg 沒有這個限制, text 能支援各種大小.
按照 SQL 標準, 做 null 判斷不能用 = null, 只能用 is null
the result of any arithmetic comparison with NULL is also NULL
但 pg 可以設定 transform_null_equals 把 = null 翻譯成 is null 避免踩坑
不少人應該遇到過 MySQL 裡需要 utf8mb4 才能顯示 emoji 的坑, Pg 就沒這個坑.
MySQL 的事務隔離級別 repeatable read 並不能阻止常見的併發更新, 得加鎖才可以, 但悲觀鎖會影響效能, 手動實現樂觀鎖又複雜. 而 Pg 的列裡有隱藏的樂觀鎖 version 欄位, 預設的 repeatable read 級別就能保證併發更新的正確性, 並且又有樂觀鎖的效能. 附帶一個各資料庫對隔離級別的行為差異比較調查: http://www.cs.umb.edu/~poneil/iso.pdf
MySQL 不支援多個表從同一個序列中取 id, 而 Pg 可以.
MySQL 不支援 OVER 子句, 而 Pg 支援. OVER 子句能簡單的解決 "每組取 top 5" 的這類問題.
幾乎任何資料庫的子查詢 (subquery) 效能都比 MySQL 好.
更多的坑:
http://blog.ionelmc.ro/2014/12/28/terrible-choices-mysql/
不少人踩完坑了, 以為換個資料庫還得踩一次, 所以很抗拒, 事實上不是!!!
Pg 不僅僅是 SQL 資料庫
它可以儲存 array 和 json, 可以在 array 和 json 上建索引, 甚至還能用表示式索引. 為了實現文件資料庫的功能, 設計了 jsonb 的儲存結構. 有人會說為什麼不用 Mongodb 的 BSON 呢? Pg 的開發團隊曾經考慮過, 但是他們看到 BSON 把 ["a", "b", "c"] 存成 {0: "a", 1: "b", 2: "c"} 的時候就決定要重新做一個 jsonb 了... 現在 jsonb 的效能已經優於 BSON.
現在往前端偏移的開發環境裡, 用 Pg + PostgREST 直接生成後端 API 是非常快速高效的辦法:
begriffs/postgrest · GitHub
postgREST 的效能非常強悍, 一個原因就是 Pg 可以直接組織返回 json 的結果.
它支援伺服器端指令碼: TCL, Python, R, Perl, Ruby, MRuby ... 自帶 map-reduce 了.
它有地理資訊處理擴充套件 (GIS 擴充套件不僅限於真實世界, 遊戲裡的地形什麼的也可以), 可以用 Pg 搭尋路伺服器和地圖伺服器:
PostGIS — Spatial and Geographic Objects for PostgreSQL
它自帶全文搜尋功能 (不用費勁再裝一個 elasticsearch 咯):
Full text search in milliseconds with PostgreSQL 不過一些語言相關的支援還不太完善, 有個 bamboo 外掛用調教過的 mecab 做中文分詞, 如果要求比較高, 還是自己分了詞再存到 tsvector 比較好.
它支援 trigram 索引.
trigram 索引可以幫助改進全文搜尋的結果: PostgreSQL: Documentation: 9.3: pg_trgm
trigram 還可以實現高效的正則搜尋 (原理參考 https://swtch.com/~rsc/regexp/regexp4.html )
MySQL 處理樹狀回覆的設計會很複雜, 而且需要寫很多程式碼, 而 Pg 可以高效處理樹結構:
Scaling Threaded Comments on Django at Disqus
http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures
它可以高效處理圖結構, 輕鬆實現 "朋友的朋友的朋友" 這種功能:
http://www.slideshare.net/quipo/rdbms-in-the-social-networks-age
它可以把 70 種外部資料來源 (包括 Mysql, Oracle, CSV, hadoop ...) 當成自己資料庫中的表來查詢:
Foreign data wrappers
心動不如行動
Converting MySQL to PostgreSQL
相關文章
- JSON相比XML優劣勢JSONXML
- Redis相比Memcached有哪些優勢?Redis
- Linux與windows相比有何優勢,看完就明白了LinuxWindows
- Oracle不足與MySQL優勢OracleMySql
- MyBatis和Hibernate相比,優勢在哪裡?MyBatis
- MRAM與其他記憶體技術相比具有相對優勢記憶體
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- JSON 與XML相比優點JSONXML
- 與IPv4相比,IPv6具有哪些優勢?
- insertAdjacentHTML() 與 innerHTML 相比優點HTML
- 大頻寬伺服器與其他伺服器相比的優勢是什麼?伺服器
- BGP伺服器相比其他線路有什麼優勢伺服器
- 香港伺服器相比國內伺服器的優勢伺服器
- 熱點淺談:與傳統IT開發相比,低程式碼平臺有何優勢?
- PostgreSQL與MySQL比較MySql
- postgresql 優化與維護SQL優化
- 【知識分享】FTP伺服器相比普通伺服器優勢在哪FTP伺服器
- 相比較傳統遊戲而言,鏈遊的優勢之處有哪些?遊戲
- 大資料Storm相比於Spark、Hadoop有哪些優勢(摘錄)大資料ORMSparkHadoop
- 線上進銷存軟體相比較傳統軟體的優勢
- Postgresql與MySQL的區別MySql
- PostgreSQL與MySQL的比較 - hackrMySql
- Spark與Hadoop MapReduce相比,有哪些優點你知道嗎?SparkHadoop
- BlueHost站群伺服器相比其它伺服器的優勢有哪些伺服器
- 谷歌的grpc和facebook的相比thrift 有哪些優勢,又有哪些缺點?谷歌RPC
- Docker的優勢與不足Docker
- Go~介紹與優勢Go
- MySQL擁有的五大優勢MySql
- 雙執行緒架構:小程式相比於H5的架構優勢執行緒架構H5
- Python為啥這麼牛?跟其他語言相比究竟有什麼優勢?Python
- mysql之json型別與文字儲存json的優勢MySqlJSON型別
- VGChartz:Xbox Series X|S相比Xbox One同期銷量優勢達146萬臺GC
- 迎接比而蓋子--Java技術相比C或微軟的.net的應用優勢Java微軟
- PostgreSQL與MySQL常用命令對照MySql
- Facebook AI 研究院負責人:相比百度和谷歌,我們有哪些優勢?AI谷歌
- 分享:下一代 Hadoop YARN 簡介:相比於MRv1,YARN的優勢HadoopYarn
- div+css特點與優勢CSS
- Sun如何處理PostgreSQL和Java DB?SQLJava