PostgreSQL在与mysql的比较中稍微弱势项:

1.都是堆表,没有所谓的聚集索引表,其实问题不大,聚集索引表也只是在使用聚集索引那些列有加速,而且pg也有聚集索引,只不过要定期重建。

2.mvcc实现,pg是直接在原来page中标记删除、更新行。而mysql的innedb则是像oracle一样,弄了一个垃圾回收区存放这些并发的版本。

  1)pg这样做的好处是更新、删除很快,数据恢复也很快。坏处是进行垃圾清理时会扫描page,增加IO消耗,而且在进行垃圾回收时的设置策略需要DBA去设计,较复杂,刚刚使用的人不了解,可能导致autovaccum设置了也不会生效,进而导致垃圾数据的积压。

  2)同样是mvcc这种方式,对于高频更新的大表来说,可以在建表的时候设置fillfactor,进而使表的更新发生hot update,在更新时索引不会改变,只是索引指向的ctid重定向到了新行的ctid。这同样是考验DBA的设计能力,初学者在不知道的情况下会觉得更新不但要更新表的tuple,还要更新index的tuple。

那么在mysql中怎么做呢?更新时将旧的行拷贝到垃圾回收区,然后将老行的数据替换为新行数据,索引不用修过。那么数据拷贝的过程也是比较耗时的。

3.正是基于这种mvcc的实现,很多人认为pg不适合做在线事物数据库,这是不合理的。

  1)这种实现方式在大表的高频更新时可能会比mysql慢一点,但不存在太大差距。

  2)在数据的分析处理上,pg的jion实现则要优于mysql,这也是大家公认pg在替代oracle中优势的地方。

总结:

  在线事物上,pg占稍微劣势,但不存在太大差异,90%的应用都感知不到这种差异。

  在线分析上,pg占优势,稍微复杂的应用都能感受到。

  

  作为一个混合型数据库需求时,pg完胜mysql。

且pg12将添加新的存储引擎,借鉴innerdb实现方式,这样在OLTP业务上将不再有劣势……,同样,mysql也可以学习pg在企业级应用上的严谨和多表分析上的技术来改进。未来两种数据库将不分高下,都能覆盖大多数应用场景。

思考--PostgreSQL在与mysql的比较中稍微弱势项的更多相关文章

  1. MySQL 5.6 中一个重要的优化——Index Condition Pushdown,究竟push down了什么

    1        问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...

  2. MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...

  3. 为什么选择PostgreSQL而不是MySQL

    David Bolton是一名独立开发者,他使用PostgreSQL和MySQL都已有超过十年的时间.近日,他撰文阐述了选择PostgreSQL而不是MySQL的理由.他认为,MySQL之所以仍然如此 ...

  4. 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...

  5. MySQL存储引擎中的MyISAM和InnoDB

    在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...

  6. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  7. mysql 5.7中的用户权限分配相关解读!

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...

  8. mysql向表中某字段后追加一段字符串:

    mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...

  9. 在MySQL向表中插入中文时,出现:incorrect string value 错误

    在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8.      一.修改数据库的默认字符集   ...

随机推荐

  1. Cookie相关工具方法

    /** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...

  2. Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误

    问题 在 Travis CI 编译的时候出现 Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain ...

  3. TTTTTTTTTTTTTTTTTTT CF 银行转账 图论 智商题

    C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  4. ReactJS 结合 antd-mobile 开发 h5 应用基本配置

    在 ReactJS 较为初级的使用 antd-mobile 使用时候直接加载 node_modules 文件中的相关 CSS,这个使用方法效率低:更高明的方法则按需加载,需要设置如下: 在 packa ...

  5. 01Two Sum题解

    Tow Sum 原题概述: Given an array of integers, return indices of the two numbers such that they add up to ...

  6. sqli-labs(46)

    0X01首先我们先来看一下源码 发现查询语句变成了 order by  参数也变成了 sort 看看是什么样的 ()首先看看本关sql语句 $sql = "SELECT * FROM use ...

  7. Android Studio基本使用

    1.    创建Android项目 1)    Application name:应用名称,launcher界面显示的 2)    Company Domain:公司域名(sprd.com) 3)   ...

  8. 在linux 系统下 使用命令行对mysql 数据库进行操作

    1.连接mysql root@test:/home# mysql -uroot -proot <uroot是用户名,proot是密码> 2.查询所有的库 mysql> show da ...

  9. jQuery file upload --Multiple File Input Fields in One Form

    The plugin can be applied to a form with multiple file input fields out of the box. The files are se ...

  10. spark 笔记 6: RDD

    了解RDD之前,必读UCB的论文,个人认为这是最好的资料,没有之一. http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf A Re ...