思考--PostgreSQL在与mysql的比较中稍微弱势项
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的比较中稍微弱势项的更多相关文章
- MySQL 5.6 中一个重要的优化——Index Condition Pushdown,究竟push down了什么
1 问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...
- MySQL存储引擎中的MyISAM和InnoDB区别详解
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...
- 为什么选择PostgreSQL而不是MySQL
David Bolton是一名独立开发者,他使用PostgreSQL和MySQL都已有超过十年的时间.近日,他撰文阐述了选择PostgreSQL而不是MySQL的理由.他认为,MySQL之所以仍然如此 ...
- 【Mysql】—— MySQL存储引擎中的MyISAM和InnoDB区别详解
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...
- MySQL存储引擎中的MyISAM和InnoDB
在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问.为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数 ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- mysql 5.7中的用户权限分配相关解读!
这篇文章主要介绍了MySQL中基本的用户和权限管理方法,包括各个权限所能操作的事务以及操作权限的一些常用命令语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下 一.简介 各大帖子及文章都会讲 ...
- mysql向表中某字段后追加一段字符串:
mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...
- 在MySQL向表中插入中文时,出现:incorrect string value 错误
在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8. 一.修改数据库的默认字符集 ...
随机推荐
- Cookie相关工具方法
/** * InputStream转化为byte[]数组 * @param input * @return * @throws IOException */ public static byte[] ...
- 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 ...
- TTTTTTTTTTTTTTTTTTT CF 银行转账 图论 智商题
C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- ReactJS 结合 antd-mobile 开发 h5 应用基本配置
在 ReactJS 较为初级的使用 antd-mobile 使用时候直接加载 node_modules 文件中的相关 CSS,这个使用方法效率低:更高明的方法则按需加载,需要设置如下: 在 packa ...
- 01Two Sum题解
Tow Sum 原题概述: Given an array of integers, return indices of the two numbers such that they add up to ...
- sqli-labs(46)
0X01首先我们先来看一下源码 发现查询语句变成了 order by 参数也变成了 sort 看看是什么样的 ()首先看看本关sql语句 $sql = "SELECT * FROM use ...
- Android Studio基本使用
1. 创建Android项目 1) Application name:应用名称,launcher界面显示的 2) Company Domain:公司域名(sprd.com) 3) ...
- 在linux 系统下 使用命令行对mysql 数据库进行操作
1.连接mysql root@test:/home# mysql -uroot -proot <uroot是用户名,proot是密码> 2.查询所有的库 mysql> show da ...
- 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 ...
- spark 笔记 6: RDD
了解RDD之前,必读UCB的论文,个人认为这是最好的资料,没有之一. http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf A Re ...