前言
之前就聽說pg功能強大,而且使用排名也比較高,正好要接入pg管控運維,需要快速學習,下面是pg與mysql和Oracle的簡單對比,可以在大的層面上有所瞭解
pg與mysql對比
MySQL | pg |
---|---|
SQL語法支持弱(不支持sequence,子查詢性能弱) | 主流奪標查詢能力強(Nest loop, hash join, sort merge join), sql語法能力強(with語句), 正則表達式能力強,where支持正則表達函數,存儲過程支持的好(可用perl Python編寫) |
性能數據少 (這個確實,性能採集需要專門監控來做) | 性能工具強(大量性能試圖,看到正在執行的sql,鎖視圖等),有專門的架構和進程用於性能收集 |
online DDL支持的不好 | 加空列只是加表定義,瞬間的事,在線索引不鎖表 |
異步複製/半同步複製 | 9.1開始支持同步複製 |
支持複雜SQL,支持大量分析函數,空間索引,支持插件 |
- 使用推薦
- 簡單存儲功能,操作簡單,大部分邏輯在應用中完成 推薦用 mysql或者nosql
- 不想消耗太多開發資源,數據庫完美與代碼融合 推薦用pg,寫數據庫就跟寫Python似的
pg與Oracle對比
- 共同點
- 都是用共享內存進程結構
- 連接都是一個進程爲此連接服務,跟mysql的線程池差別較大
- WAL日誌和Oracle的redo類似都是記錄物理塊數據的變化,與mysql的binlog差別較大
- pg功能略弱與Oracle(不支持索引組織表等)
- pg支持的類型多,比如: 網絡地址類型,XML, JSON, UUID, 數組,正則表達式函數where中可用正則,可用perl/Python等寫存儲過程 更小巧
參考: postgresql 修煉之道