PostgreSQL與MySQL優勢比較
|
PostgreSQL主要優勢:
1. PostgreSQL完全免費,而且是BSD協議,如果你把PostgreSQL改一改,然後再拿去賣錢,也沒有人管你,這一點很重要,這表明了PostgreSQL資料庫不會被其它公司控制。oracle資料庫不用說了,是商業資料庫,不開放。而MySQL資料庫雖然是開源的,但現在隨著SUN被oracle公司收購,現在基本上被oracle公司控制,其實在SUN被收購之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的資料都是放在InnoDB引擎中的,反正我們公司都是這樣的。所以如果MySQL的市場範圍與oracle資料庫的市場範圍衝突時,oracle公司必定會犧牲MySQL,這是毫無疑問的。
2. 與PostgreSQl配合的開源軟體很多,有很多分散式叢集軟體,如pgpool、pgcluster、slony、plploxy等等,很容易做讀寫分離、負載均衡、資料水平拆分等方案,而這在MySQL下則比較困難。
3. PostgreSQL原始碼寫的很清晰,易讀性比MySQL強太多了,懷疑MySQL的原始碼被混淆過。所以很多公司都是基本PostgreSQL做二次開發的。
4. PostgreSQL在很多方面都比MySQL強,如複雜SQL的執行、儲存過程、觸發器、索引。同時PostgreSQL是多程序的,而MySQL是執行緒的,雖然併發不高時,MySQL處理速度快,但當併發高的時候,對於現在多核的單臺機器上,MySQL的總體處理效能不如PostgreSQL,原因是MySQL的執行緒無法充分利用CPU的能力。
目前只想到這些,以後想到再新增,歡迎大家拍磚。
PostgreSQL與oracle或InnoDB的多版本實現的差別
PostgreSQL與oracle或InnoDB的多版本實現最大的區別在於最新版本和歷史版本是否分離儲存,PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分離了資料,索引本身沒有分開。
PostgreSQL的主要優勢在於:
1. PostgreSQL沒有回滾段,而oracle與innodb有回滾段,oracle與Innodb都有回滾段。對於oracle與Innodb來說,回滾段是非常重要的,回滾段損壞,會導致資料丟失,甚至資料庫無法啟動的嚴重問題。另由於PostgreSQL沒有回滾段,舊資料都是記錄在原先的檔案中,所以當資料庫異常crash後,恢復時,不會象oracle與Innodb資料庫那樣進行那麼複雜的恢復,因為oracle與Innodb恢復時同步需要redo和undo。所以PostgreSQL資料庫在出現異常crash後,資料庫起不來的機率要比oracle和mysql小一些。
2. 由於舊的資料是直接記錄在資料檔案中,而不是回滾段中,所以不會象oracle那樣經常報ora-01555錯誤。
3. 回滾可以很快完成,因為回滾並不刪除資料,而oracle與Innodb,回滾時很複雜,在事務回滾時必須清理該事務所進行的修改,插入的記錄要刪除,更新的記錄要更新回來(見row_undo函式),同時回滾的過程也會再次產生大量的redo日誌。
4. WAL日誌要比oracle和Innodb簡單,對於oracle不僅需要記錄資料檔案的變化,還要記錄回滾段的變化。
PostgreSQL的多版本的主要劣勢在於:
1、最新版本和歷史版本不分離儲存,導致清理老舊版本需要作更多的掃描,代價比較大,但一般的資料庫都有高峰期,如果我們合理安排VACUUM,這也不是很大的問題,而且在PostgreSQL9.0中VACUUM進一步被加強了。
2、由於索引中完全沒有版本資訊,不能實現Coverage index scan,即查詢只掃描索引,直接從索引中返回所需的屬性,還需要訪問表。而oracle與Innodb則可以;
程序模式與執行緒模式的對比
PostgreSQL和oracle是程序模式,MySQL是執行緒模式。
程序模式對多CPU利用率比較高。
程序模式共享資料需要用到共享記憶體,而執行緒模式資料本身就是在程序空間內都是共享的,不同執行緒訪問只需要控制好執行緒之間的同步。
執行緒模式對資源消耗比較少。
所以MySQL能支援遠比oracle多的更多的連線。
對於PostgreSQL的來說,如果不使用連線池軟體,也存在這個問題,但PostgreSQL中有優秀的連線池軟體軟體,如pgbouncer和pgpool,所以通過連線池也可以支援很多的連線。
堆表與索引組織表的的對比
Oracle支援堆表,也支援索引組織表
PostgreSQL只支援堆表,不支援索引組織表
Innodb只支援索引組織表
索引組織表的優勢:
表內的資料就是按索引的方式組織,資料是有序的,如果資料都是按主鍵來訪問,那麼訪問資料比較快。而堆表,按主鍵訪問資料時,是需要先按主鍵索引找到資料的物理位置。
索引組織表的劣勢:
索引組織表中上再加其它的索引時,其它的索引記錄的資料位置不再是物理位置,而是主鍵值,所以對於索引組織表來說,主鍵的值不能太大,否則佔用的空間比較大。
對於索引組織表來說,如果每次在中間插入資料,可能會導致索引分裂,索引分裂會大大降低插入的效能。所以對於使用innodb來說,我們一般最好讓主鍵是一個無意義的序列,這樣插入每次都發生在最後,以避免這個問題。
由於索引組織表是按一個索引樹,一般它訪問資料塊必須按資料塊之間的關係進行訪問,而不是按物理塊的訪問資料的,所以當做全表掃描時要比堆錶慢很多,這可能在OLTP中不明顯,但在資料倉庫的應用中可能是一個問題。
PostgreSQL9.0中的特色功能:
PostgreSQL中的Hot Standby功能
也就是standby在應用日誌同步時,還可以提供只讀服務,這對做讀寫分離很有用。這個功能是oracle11g才有的功能。
PostgreSQL非同步提交(Asynchronous Commit)的功能:
這個功能oracle中也是到oracle11g R2才有的功能。因為在很多應用場景中,當宕機時是允許丟失少量資料的,這個功能在這樣的場景中就特別合適。在PostgreSQL9.0中把synchronous_commit設定為false就打開了這個功能。需要注意的是,雖然設定為了非同步提交,當主機宕機時,PostgreSQL只會丟失少量資料,非同步提交併不會導致資料損壞而資料庫起不來的情況。MySQL中沒有聽說過有這個功能。
PostgreSQL中索引的特色功能:
PostgreSQL中可以有部分索引,也就是隻能表中的部分資料做索引,create index 可以帶where 條件。同時PostgreSQL中的索引可以反向掃描,所以在PostgreSQL中可以不必建專門的降序索引了。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(1773) | 評論(0) | 轉發(0) | 給主人留下些什麼吧!~~ 評論熱議相關推薦
PostgreSQL與MySQL優勢比較
特性 MySQL PostgreSQL 例項 通過執行 MySQL 命
PostgreSQL 與 MySQL 常用命令對照
有很多 MySQL 的使用者在使用 PostgreSQL 時,對於 PostgreSQL 客戶端(psql)的常用命令不是很熟悉,有時甚至會感到困惑,在此羅列 MySQL 客戶端 mysql 與 PostgreSQL 客戶端 psql 常用命令的對照關係,方便大家參考。 在此之前,先來看看幫助命令,二者均可
sql server和my sql 命令(語句)的區別,sql server與mysql的比較
sql與mysql的比較 1、連線字串 sql :Initial Catalog(database)=x; --資料庫名稱 Data S
SQLite與MySQL與PostgreSQL:關係資料庫的比較
概述和功能 SQLite是一個基於檔案的嵌入式RDBMS,不需要任何安裝或設定。反過來,這意味著應用程式不在需要啟動,停止或配置的單獨伺服器程序下執行。這種無伺服器架構使資料庫能夠跨平臺相容。 完整的SQL資料庫包含在單個磁碟檔案中,所有讀取和寫入都直接在此磁碟檔案上進行。由於資料直接寫回磁
Oracle,mysql,sqlserver,postgresql語句幾點比較
記錄 rom person lln number data select ont padding 1.分頁 Oracle: SELECT * FROM(SELECT A.*, ROWNUM RN FROM (select T.* from sj_receiptinfo
數據庫操作對比:Sql Server與MYSQL相比有哪些建站優勢?
ASP PHP IT SQL MYSQL 最近一直在做博客網站,從定位主題到程序和數據庫的選擇,確實廢了不少心思,經過細致的思考,最終將主題定位為讀書方面,還有文學和學習筆記,但是對於程序和數據庫問題,我一直就比較費心,因為個人是個技術小白,因此在這方面有些難題要解決。 第一個難題:博客程
mysql中EXISTS與IN用法比較
1、使用方式: (1)EXISTS用法 select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.i
MySQL與Oracle 差異比較-基本語法
1、 查詢行數自增1 Oracle:中select rownum , a.* from fdcom a Mysql: select @ROWNO := @ROWNO + 1 as rownum , a.* from (select shortname from
mysql中in與exists效率比較
這條語句適用於a表比b表大的情況 select * from ecs_goods a where cat_id in(select cat_id from ecs_category); 這條語句適用於b表比a表大的情況select * from ecs_goods
mysql與其他資料庫比較
功能比較 作為一個成熟的資料庫管理系統,要滿足各種各樣的商業需求,功能肯定是會被列入重點參考物件的。Mysql的早期版本功能非常簡單,只能做一些基礎的結構化資料存取操作,但是經過多年的改進和完善之後,現在已經具備了所有通用資料庫管理系統需要的相關功能。 Mysql
HQL當前時間與Mysql資料庫時間比較
public List<miniActivityRecord> getActivityRecordList(int pageNumber) {// 查詢語句HQL構建StringBuffer sql = new StringBuffer();sql.appe
PostgreSQL與其他資料庫的比較
轉自:http://www.cnblogs.com/sinlang5778/articles/3040854.html 特性 MySQL PostgreSQL 例項 通過執行 MySQL 命令(mysqld)啟動例項。一個例項可以管理一個或多個數據庫。一臺伺服器可
JSP的優勢 和劣勢 與php的比較
現在市場上的oa基本上可歸結為兩大陣營,即php陣營和java陣營。但對接觸oa不久的使用者來說,看到的往往只是它們的表相,只是明顯的價格差異,卻很難看出它們之間的實際差異。其實, PHP + MYSQL 不值錢不僅僅侷限於oa軟體,而是整體上PHP + MYSQL開發的軟體都不如java開發的軟體值錢。為什
關於Spring的JDBC連線mysql(與傳統jdbc比較)
Spring的jdbc與Hibernate,Mybatis相比較,功能不是特別強大,但是在小型專案中,也到還是比較靈活簡單。 首先可以看看一下傳統的jdbc是如何操作的呢 傳統JDBC 首先呢先要建立一個bean例項,例如Student.java 1 public class Student {
MySQL之——server保持與MySQL的連接
size time var 字段 數據庫操作 操作 登錄 輸入 有一種 轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/47008019 server程序常常要訪問數據庫,而且server程序是長時間保
Solr6.5與mysql集成建立索引
file 數據庫數據 -c req cal str syn web-inf 想是 首先在solrconfig.xml(我的是保存在/usr/local/tomcat/solrhome/mycore/conf/下)的<requestHandler name="/sele
設計模式—靜態代理模式(聚合與繼承方式比較)
rri 技術分享 ktr sta too div ide rup 增加 一、概述 1.目標:要在Tank的move()方法做時間代理及日誌代理(可以設想以後還要增加很多代理處理),且代理間的順序可活更換 2.思路: (1)聚合:代理類聚合了被代理類,且代理類及被代理類都實現
13-1 在PHP中使用mysqli與MySQL交互
style value free error tor file mysql服務器 del 提示 1.建立、關閉與MySQL服務器的連接 1)連接指定的mysql服務器 [email protected]/* */_connect($host,
oracle與mysql與sqlserver的分頁
興趣 href 查詢 lac 博文 簡單的 數據庫 分頁查詢 agen 假設當前是第PageNo頁,每頁有PageSize條記錄,現在分別用Mysql、Oracle和SQL Server分頁查詢student表。 1、Mysql的分頁查詢: 1 SELECT 2
Java與mysql數據庫編程中遇見“Before start of result set at com.mysql.jdbc.SQLError.createSQLException” 的解決辦法
statement sql語句 sql數據庫 mark .sql .cn ava 解決 error 轉載:http://www.cnblogs.com/akiradunn/p/5771513.html 這個Bug是因為在取出ResultSet對象,對其進行操作時,沒有