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则可以;

转载自:

https://www.phpfans.net/ask/problem1/0351989128.html

最新文章

  1. 用sql语句建表
  2. android 抓包 使用 tcpdmp + Wireshark
  3. 【php】mysql全局ID生成方案
  4. phpcms分页使用
  5. Jquery 知识表
  6. 调用wcf 得不到HttpWebResponse.ContentLength的长度
  7. 【M30】代理类
  8. HDU1557权利选举
  9. 老李分享:导出xml报告到手机
  10. [Alpha阶段]第七次Scrum Meeting
  11. Linux平台 Oracle 18c RAC安装Part1:准备工作
  12. AngularJS初始化Select选择框
  13. 自动化测试-20.selenium之FireFox下载项配置
  14. wc.java
  15. <转载> 58到家数据库设计规范
  16. Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数
  17. 线段树模板(施工ing)
  18. Mutex 的正确打开方式
  19. docker——三大核心概念
  20. PHP memcache的使用教程

热门文章

  1. 长乐培训Day2
  2. 接口缓存--把接口放在redis数据库中,减少访问量
  3. conda命令入坑记
  4. Kubernetes(k8s) docker 修改 /dev/shm大小
  5. linux查看系统未被挂载的磁盘空间的方法
  6. Linux判断SSD或HDD + 模拟SSD
  7. 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
  8. 移动端调试工具Vconsole
  9. iOS10推送必看UNNotificationAttachment以及UNTimeIntervalNotificationTrigger
  10. SQLSEVER 同台服务器下不同表 触发器实现数据实时同步